TL;DR: Webspresso — это минималистичный SSR фреймворк для Node.js с файловой маршрутизацией, Nunjucks шаблонизатором, встроенным i18n и CLI. Он предлагает готовые решения для sitemap, аналитики, админки и других common tasks.
Введение: зачем ещё один SSR фреймворк?
В экосистеме Node.js уже есть Next.js, Nuxt, SvelteKit и другие meta-frameworks. Однако Webspresso позиционируется как более легковесная альтернатива с акцентом на:
- Минимализм — только необходимый core для SSR
- Конвенция над конфигурацией — файловая маршрутизация как в Next.js
- Баттерри-включенные фичи — встроенные плагины для common tasks
- Production-ready из коробки — health checks, rate limiting и т.д.
Core Architecture
Webspresso построен вокруг Express (с планами поддержки других HTTP-стеков) и предлагает:
Файловая маршрутизация
// pages/users/[id].ts
import { defineRoute } from 'webspresso';
export default defineRoute({
params: z.object({ id: z.string() }), // Zod валидация
async handler({ params }) {
const user = await db.user.findUnique({
where: { id: params.id }
});
return { user };
}
});
Роуты автоматически становятся доступны по соответствующему пути (/users/123).
Nunjucks шаблонизация
<!-- templates/user.njk -->
<h1>{{ user.name }}</h1>
<p>Joined: {{ user.createdAt | date }}</p>
Шаблоны поддерживают наследование, макросы и другие фичи Nunjucks.
Встроенный i18n
# locales/en.yml
greeting: Hello, {name}!
// В любом роуте
t('greeting', { name: 'John' }); // => "Hello, John!"
Практическое применение
Быстрый старт
npx create-webspresso@latest my-app
cd my-app
npm run dev
Структура проекта:
my-app/
├── pages/ # Роуты
├── templates/ # Nunjucks шаблоны
├── locales/ # i18n файлы
├── plugins/ # Кастомные плагины
└── webspresso.config.ts
Кастомные плагины
Webspresso поддерживает плагины для расширения функциональности:
// plugins/analytics.ts
export default function analyticsPlugin(app) {
app.middleware((req, res, next) => {
trackPageView(req.url);
next();
});
}
Встроенные плагины
Из коробки доступны:
- Sitemap — автоматическая генерация
- Admin Panel — CRUD интерфейс для моделей
- Swagger — OpenAPI документация
- Health Checks —
/healthzэндпоинт - Rate Limiting — защита от брутфорса
Пример включения плагина:
// webspresso.config.ts
export default {
plugins: [
'sitemap',
'rate-limit'
]
}
Заключение
Webspresso — это интересный вариант для проектов, где:
- Нужен минималистичный, но production-ready SSR
- Важна скорость разработки за счёт convention-over-configuration
- Требуются встроенные решения для common tasks
Фреймворк особенно хорош для:
- Маркетплейсов
- Контентных сайтов
- Админок и дашбордов
Пока проект молодой, но уже предлагает продуманный набор фич. Если вам близка философия “батарейки включены, но можно отключить”, стоит попробовать Webspresso в следующем проекте.
Источник: https://github.com/litepacks/webspresso