Системные требования и зависимости

Fresh — фреймворк для разработки веб-приложений, изначально спроектированный под экосистему Deno. Использование других сред выполнения JavaScript (Node.js, Bun) не предусмотрено и не поддерживается.

Минимальные требования:

  • Deno версии не ниже 1.31 Рекомендуется использовать актуальную стабильную версию, так как Fresh активно использует новые возможности платформы.

  • Поддерживаемые операционные системы:

    • Linux (x64, arm64)
    • macOS (Intel и Apple Silicon)
    • Windows 10+

Fresh не требует предварительной установки Node.js, npm или yarn.


Роль Deno в архитектуре Fresh

Fresh тесно интегрирован с ключевыми особенностями Deno:

  • ESM по умолчанию — только нативные ES-модули, без CommonJS
  • Импорт по URL — зависимости загружаются напрямую из сети
  • Встроенный TypeScript — компиляция без дополнительных инструментов
  • Система разрешений — строгий контроль доступа к сети, файлам и окружению
  • Встроенный сервер HTTP — не требуется сторонний серверный фреймворк

Это устраняет необходимость в:

  • package.json
  • node_modules
  • сборщиках и бандлерах на этапе разработки

Зависимости Fresh

Fresh следует принципу минимализма и использует крайне ограниченное число внешних библиотек.

Основные зависимости

  • Preact

    • Используется как библиотека для описания пользовательского интерфейса
    • Обеспечивает JSX, компоненты и хуки
    • Значительно легче React, при сохранении совместимого API
  • Deno standard library

    • HTTP-сервер
    • Работа с путями и файловой системой
    • Утилиты для разработки и тестирования
  • esbuild (через Deno) Применяется для:

    • транспиляции JSX
    • оптимизации клиентского кода
    • генерации island-скриптов

Все зависимости импортируются напрямую по URL, например:

import { serve } from "https://deno.land/std/http/server.ts";

Отсутствие традиционного менеджера пакетов

Fresh не использует npm-совместимые менеджеры пакетов. Управление зависимостями осуществляется через:

  • URL-импорты
  • import maps

Пример import_map.json:

{
  "imports": {
    "preact": "https://esm.sh/preact@10.19.2",
    "preact/hooks": "https://esm.sh/preact@10.19.2/hooks"
  }
}

Преимущества подхода:

  • отсутствие дублирующихся версий библиотек
  • прозрачность источников зависимостей
  • мгновенная установка проекта без загрузки пакетов

Инструменты, входящие в стандартную поставку

Fresh не требует отдельной установки вспомогательных утилит. Всё необходимое уже включено в Deno:

  • Тестированиеdeno test
  • Линтингdeno lint
  • Форматированиеdeno fmt
  • Бандлинг и транспиляция — встроенные возможности Deno
  • Dev-сервер с HMR — предоставляется самим Fresh

Отсутствует необходимость в:

  • Webpack
  • Vite
  • Babel
  • ESLint
  • Prettier

Права доступа и разрешения

Deno применяет модель безопасности на основе явных разрешений. Для работы Fresh обычно требуются:

  • --allow-net — обработка HTTP-запросов
  • --allow-read — чтение файлов маршрутов и компонентов
  • --allow-env — доступ к переменным окружения (опционально)

Пример запуска dev-сервера:

deno run -A dev.ts

Флаг -A используется в режиме разработки для упрощения работы, но в production рекомендуется ограничивать разрешения.


Поддержка TypeScript

TypeScript является обязательной частью стека Fresh:

  • все серверные файлы пишутся на TypeScript
  • JSX-файлы используют расширение .tsx
  • типы компонентов, хуков и контекста встроены

Дополнительные пакеты @types/* не используются, так как типы предоставляются самими библиотеками через ESM-экспорт.


Клиентские зависимости и island-архитектура

Fresh применяет island-подход, при котором JavaScript отправляется в браузер только для интерактивных компонентов.

Следствия для зависимостей:

  • клиентские библиотеки загружаются только при необходимости
  • нет общего клиентского бандла
  • каждый island имеет собственный минимальный скрипт

Это снижает:

  • объём передаваемого JavaScript
  • время загрузки страницы
  • зависимость от тяжёлых UI-фреймворков

Совместимость сторонних библиотек

Поддерживаются только библиотеки, которые:

  • распространяются как ES-модули
  • не зависят от Node.js API (fs, path, process)
  • корректно работают в браузере или Deno

Для адаптации npm-пакетов используется сервис esm.sh, автоматически:

  • транспилирующий CommonJS в ESM
  • добавляющий типы
  • оптимизирующий код под Deno и браузер

Минимальные требования к окружению разработки

  • Современный браузер с поддержкой ES2020+
  • Любой текстовый редактор с поддержкой TypeScript и JSX
  • Отсутствие необходимости в глобальных CLI-утилитах, кроме Deno

Fresh не накладывает требований на IDE, сборочные системы или CI-инфраструктуру, так как полностью опирается на стандартные средства Deno.