Fresh — это современный фреймворк для построения веб-приложений на JavaScript и TypeScript, ориентированный на высокую производительность и минимизацию клиентского JavaScript. Одной из ключевых особенностей Fresh является система встроенных плагинов, которая позволяет расширять возможности фреймворка без необходимости ручной настройки сборки.
Встроенные плагины в Fresh представляют собой модули, которые автоматически интегрируются в приложение и выполняют определённые задачи на этапе сборки или выполнения кода. Они делятся на несколько категорий:
Рендеринг и SSR (Server-Side Rendering) Плагины
этой категории обрабатывают серверный рендеринг страниц, обеспечивая
оптимизацию HTML и управление состоянием компонентов на сервере. Пример
функционала: автоматическое внедрение
<link rel="preload"> для ресурсов, оптимизация
загрузки изображений.
Обработка статики Плагины для работы с файлами статики включают минификацию CSS и JavaScript, оптимизацию изображений и генерацию фавиконов. Они позволяют минимизировать нагрузку на сеть и ускорить загрузку страниц.
Маршрутизация Встроенные плагины маршрутизации упрощают работу с динамическими URL и обработку параметров запроса. Они обеспечивают автоматическую генерацию маршрутов на основе файловой структуры проекта.
Интеграция с TypeScript Fresh включает плагины для проверки типов и транспиляции TypeScript в JavaScript, что делает работу с типизированным кодом полностью прозрачной.
Плагины в Fresh обычно подключаются через конфигурационный файл
fresh.config.ts. Каждый плагин задаётся объектом с
параметрами, определяющими поведение:
import { defineConfig } from "fresh";
export default defineConfig({
plugins: [
{
name: "fresh-plugin-optimize",
options: { minify: true, target: "esnext" },
},
{
name: "fresh-plugin-image",
options: { compress: true, formats: ["webp", "avif"] },
},
],
});
Ключевые моменты конфигурации:
name — уникальный идентификатор плагина.options — объект с настройками плагина, зависящий от
конкретного функционала.Fresh выполняет плагины последовательно в процессе сборки приложения. Каждому плагину передаются:
Пример использования API плагина для генерации минифицированного CSS:
export default function minifyCssPlugin(ctx) {
for (const file of ctx.files) {
if (file.path.endsWith(".css")) {
file.content = minifyCss(file.content);
}
}
}
Встроенные плагины Fresh могут автоматически интегрироваться с внешними библиотеками, такими как Tailwind CSS, PostCSS, ESBuild. Это позволяет:
Кроме встроенных, Fresh поддерживает создание пользовательских плагинов. Они реализуются как функции, принимающие контекст сборки, и могут модифицировать проект на любом этапе. Основные рекомендации:
Пример простого пользовательского плагина:
export default function addMetaPlugin(ctx) {
ctx.files.forEach(file => {
if (file.path.endsWith(".html")) {
file.content = file.content.replace(
"</head>",
`<meta name="viewport" content="width=device-width, initial-scale=1.0"></head>`
);
}
});
}
Встроенные плагины Fresh создают гибкую и мощную экосистему, позволяя управлять всеми аспектами веб-приложения с минимальным количеством ручной настройки и высокой производительностью.