Фреймворк Fresh предоставляет современный подход к созданию веб-приложений на JavaScript с использованием Deno. Одной из сильных сторон Fresh является возможность интеграции с разнообразными библиотеками, расширяющими функциональность и упрощающими разработку. Рассмотрим наиболее востребованные библиотеки и их применение.
Fresh изначально строится на основе Preact, облегчённой версии React. Preact обеспечивает:
useState,
useEffect).Использование Preact позволяет писать интерактивные компоненты внутри Fresh-приложения с привычным синтаксисом JSX. Для примера, компонент кнопки с состоянием кликов:
/** @jsx h */
import { h } from "preact";
import { useState } from "preact/hooks";
export default function Counter() {
const [count, setCount] = useState(0);
return (
<button onCl ick={() => setCount(count + 1)}>
Клики: {count}
</button>
);
}
Интеграция с Fresh происходит автоматически через
fresh-роутинг и серверный рендеринг.
Для работы с HTTP-запросами и маршрутизацией в Fresh используется серверная библиотека Oak:
Пример middleware для логирования запросов:
import { Application } from "https://deno.land/x/oak/mod.ts";
const app = new Application();
app.use(async (ctx, next) => {
console.log(`${ctx.request.method} ${ctx.request.url}`);
await next();
});
app.listen({ port: 8000 });
Использование Oak совместно с Fresh позволяет создавать гибкие серверные маршруты и API.
Для рендеринга и манипуляций с DOM на сервере применяются библиотеки типа deno_dom:
Пример генерации HTML с Deno DOM:
import { DOMParser } from "https://deno.land/x/deno_dom/deno-dom-wasm.ts";
const htmlString = "<div class='container'>Привет Fresh</div>";
const doc = new DOMParser().parseFromString(htmlString, "text/html");
console.log(doc?.querySelector(".container")?.textContent);
Это облегчает тестирование и серверную вёрстку без необходимости запуска браузера.
Для более лёгких API можно использовать микро-фреймворки, такие как Drash, которые подходят для Fresh-проектов с минимальным серверным стеком. Особенности:
Drash эффективен для небольших сервисов и серверной логики внутри Fresh-приложения.
Для стилизации компонентов и страниц широко применяется Tailwind CSS:
Пример использования Tailwind внутри Preact-компонента:
export default function Card({ title, content }) {
return (
<div class="p-4 shadow-lg rounded-xl bg-white">
<h2 class="text-xl font-bold mb-2">{title}</h2>
<p class="text-gray-700">{content}</p>
</div>
);
}
Tailwind прекрасно сочетается с серверной рендерингом Fresh и поддерживает динамические классы, формируя адаптивный интерфейс без лишних файлов CSS.
Для работы с данными используются библиотеки для взаимодействия с базами данных, такие как Supabase:
Пример запроса к базе данных через Supabase:
import { createClient } from "https://cdn.jsdelivr.net/npm/@supabase/supabase-js/+esm";
const supabase = createClient(Deno.env.get("SUPABASE_URL"), Deno.env.get("SUPABASE_KEY"));
const { data, error } = await supabase.from("posts").select("*");
console.log(data, error);
Использование Supabase упрощает хранение и получение данных, обеспечивая быструю разработку функционального бэкенда.
Для построения API поверх Fresh популярны библиотеки GraphQL и gql-request:
Пример запроса с gql-request:
import { gql, GraphQLClient } from "https://cdn.skypack.dev/graphql-request";
const client = new GraphQLClient("https://example.com/graphql");
const query = gql`
query {
posts {
id
title
}
}
`;
const data = await client.request(query);
console.log(data);
GraphQL позволяет создавать гибкие и масштабируемые API для Fresh-приложений, минимизируя лишние запросы к серверу.
Популярные библиотеки для Fresh создают экосистему, которая сочетает лёгкость и производительность Preact, гибкость серверных решений на Deno и богатый выбор инструментов для работы с данными и интерфейсом. Правильный выбор этих библиотек позволяет строить современные веб-приложения с минимальными затратами ресурсов и максимальной скоростью разработки.