Webspresso: минималистичный SSR фреймворк для Node.js с файловой маршрутизацией и встроенными фичами

#ssr#nodejs#webspresso#backend

TL;DR: Webspresso — это минималистичный SSR фреймворк для Node.js с файловой маршрутизацией, Nunjucks шаблонизатором, встроенным i18n и CLI. Он предлагает готовые решения для sitemap, аналитики, админки и других common tasks.

Введение: зачем ещё один SSR фреймворк?

В экосистеме Node.js уже есть Next.js, Nuxt, SvelteKit и другие meta-frameworks. Однако Webspresso позиционируется как более легковесная альтернатива с акцентом на:

  1. Минимализм — только необходимый core для SSR
  2. Конвенция над конфигурацией — файловая маршрутизация как в Next.js
  3. Баттерри-включенные фичи — встроенные плагины для common tasks
  4. 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();
  });
}

Встроенные плагины

Из коробки доступны:

Пример включения плагина:

// webspresso.config.ts
export default {
  plugins: [
    'sitemap',
    'rate-limit'
  ]
}

Заключение

Webspresso — это интересный вариант для проектов, где:

Фреймворк особенно хорош для:

Пока проект молодой, но уже предлагает продуманный набор фич. Если вам близка философия “батарейки включены, но можно отключить”, стоит попробовать Webspresso в следующем проекте.


Источник: https://github.com/litepacks/webspresso