Deno — современный runtime для JavaScript и TypeScript, созданный Райаном Далем, автором Node.js. Основные принципы Deno включают безопасность по умолчанию, встроенную поддержку TypeScript, модульную систему без центрального менеджера пакетов и минимализм. Эти особенности делают его удобной платформой для разработки веб-приложений, API и серверных сервисов.
Fresh — это фреймворк для построения веб-приложений на Deno, ориентированный на производительность и простоту. Он использует рендеринг на сервере и минималистичную архитектуру компонентов. Основные аспекты взаимодействия Fresh с Deno и его экосистемой описаны ниже.
В Deno отсутствует традиционный npm. Все зависимости подключаются через URL или локальные файлы. Синтаксис импорта выглядит следующим образом:
import { serve } from "https://deno.land/std@0.203.0/http/server.ts";
Ключевые моменты:
Deno запускает скрипты в изолированной среде. Доступ к файловой системе, сети или окружению требует явного разрешения:
deno run --allow-net --allow-read server.ts
Параметры:
--allow-net — разрешение на сетевые запросы.--allow-read — доступ к файловой системе.--allow-env — доступ к переменным окружения.--allow-write — возможность записывать данные.Такой подход предотвращает непреднамеренные изменения системы и повышает безопасность приложений.
Fresh строит страницы с SSR (Server-Side Rendering), что обеспечивает:
Структура проекта Fresh включает:
routes/ — файлы с маршрутами, где каждая страница
является модулем.components/ — переиспользуемые UI-компоненты.islands/ — интерактивные компоненты, рендерящиеся на
клиенте по мере необходимости.Пример простого маршрута:
import { h } from "preact";
import { Handlers } from "$fresh/server.ts";
export const handler: Handlers = {
GET(req, ctx) {
return ctx.render({ message: "Hello from Fresh!" });
},
};
export default function HomePage({ data }) {
return <h1>{data.message}</h1>;
}
Ключевые особенности:
ctx.render передаёт данные в компонент.Fresh позволяет создавать API-эндпоинты в рамках маршрутов:
export const handler: Handlers = {
POST: async (req) => {
const data = await req.json();
return new Response(JSON.stringify({ received: data }), {
headers: { "Content-Type": "application/json" },
});
},
};
Особенности работы с API:
Deno поддерживает модули через URL, включая популярные библиотеки:
oak — middleware для построения REST API.deno-postgres — работа с PostgreSQL.std — встроенные утилиты для работы с HTTP, буферами и
временем.Импорт осуществляется напрямую, без установки через менеджер пакетов:
import { Client } from "https://deno.land/x/postgres@v0.21.2/mod.ts";
Это упрощает управление зависимостями и исключает конфликты версий.
Deno имеет встроенные инструменты:
deno test — выполнение модульных тестов.deno lint — статический анализ кода.deno fmt — автоматическое форматирование.deno bundle — сборка проекта в один файл для
деплоя.Пример теста:
import { assertEquals } from "https://deno.land/std@0.203.0/testing/asserts.ts";
Deno.test("Сумма чисел", () => {
const sum = 2 + 3;
assertEquals(sum, 5);
});
Fresh не требует отдельного сборщика. Проект можно запускать напрямую:
deno run -A --watch main.ts
Для деплоя можно использовать:
Fresh поддерживает гибридную модель:
Пример интерактивного компонента:
import { useState } from "preact/hooks";
export default function Counter() {
const [count, setCount] = useState(0);
return (
<button onCl ick={() => setCount(count + 1)}>
Счётчик: {count}
</button>
);
}
Этот компонент загружается только при взаимодействии пользователя, экономя ресурсы.
Экосистема строится вокруг модульности и безопасности, что делает её удобной для современных веб-приложений и API.
Fresh на Deno сочетает минимализм с высокой производительностью, гибкой маршрутизацией и встроенной поддержкой TypeScript, обеспечивая современный подход к созданию веб-приложений и серверных сервисов.