Fresh — это современный фреймворк для разработки веб-приложений на JavaScript и TypeScript, построенный на Deno. Он ориентирован на высокую производительность, минимизацию лишнего кода на клиенте и использование нативных возможностей серверного рендеринга. Основной принцип Fresh — компоненты рендерятся на сервере и доставляются в браузер уже готовыми, без необходимости полноценного клиентского JavaScript.
Архитектура Fresh строится вокруг следующих ключевых элементов:
routes автоматически становится маршрутом, что
упрощает настройку путей и работу с URL.handler для обработки запросов на сервере, что позволяет
легко интегрировать API и работать с базой данных.Плагины в Fresh — это механизм расширения функциональности приложения без изменения ядра фреймворка. Они позволяют:
Плагины могут модифицировать рендеринг, влиять на сборку проекта, а также расширять возможности маршрутов.
Структура плагина
Плагин — это модуль, экспортирующий объект с обязательными свойствами:
export default {
name: "plugin-name",
setup(app) {
// Логика инициализации плагина
},
};
Основные ключи объекта:
name — уникальный идентификатор плагина.setup — функция инициализации, принимает объект
приложения и позволяет добавлять middleware, хуки или изменять
конфигурацию сборки.Регистрация плагина
Плагины подключаются через конфигурационный файл
fresh.config.ts:
import pluginExample from "./plugins/pluginExample.ts";
export default {
plugins: [pluginExample],
};
Fresh автоматически вызовет функцию setup каждого
подключенного плагина при запуске сервера или сборке проекта.
Доступ к контексту приложения
Контекст приложения (app) предоставляет следующие
возможности:
Пример использования:
export default {
name: "logger-plugin",
setup(app) {
app.use(async (ctx, next) => {
console.log(`${ctx.request.method} ${ctx.request.url}`);
await next();
});
},
};Fresh поддерживает хуки, которые позволяют вмешиваться в процесс рендеринга и обработки запросов:
Пример хуков в плагине:
export default {
name: "hook-example",
setup(app) {
app.hooks.beforeRender((ctx, component) => {
component.props.timestamp = Date.now();
});
app.hooks.afterRender((ctx, html) => {
return html.replace("</body>", `<footer>Сборка: ${Date.now()}</footer></body>`);
});
},
};
Плагины Fresh распространяются как стандартные модули Deno. Для публикации:
mod.ts или index.ts.v1.0.0.Для интеграции плагина достаточно указать URL модуля в массиве
plugins:
export default {
plugins: [
"https://deno.land/x/fresh_plugins/logger@v1.0.0/mod.ts"
],
};
Плагины в Fresh — мощный инструмент для расширения функциональности приложений, позволяющий создавать модульные, масштабируемые решения с высокой производительностью и минимальной нагрузкой на клиентскую часть.