Маршрутизация

Маршруты берутся напрямую из файловой системы внутри src/.

src/
  index.ht.js              → /
  about.ht.js              → /about
  blog/
    index.ht.js            → /blog
    [slug].ht.js           → /blog/:slug
  docs/
    [...path]?.ht.js       → /docs, /docs/a, /docs/a/b, ...
  (admin)/
    users.ht.js            → /users
  404.ht.js                → dist/404.html

Таблица маршрутов

ВозможностьФайлURL
Статическийindex.ht.js/
Вложенныйblog/index.ht.js/blog
Динамическийblog/[slug].ht.js/blog/my-post
Несколько параметровblog/[year]/[slug].ht.js/blog/2026/my-post
Перехватывающийdocs/[...path].ht.js/docs/api/auth
Необязательный перехватывающийdocs/[...path]?.ht.js/docs и глубже
Группы маршрутов(admin)/users.ht.js/users

Побеждает более конкретный маршрут: статический важнее динамического, динамический важнее перехватывающего. Два файла, дающие один и тот же URL, — ошибка сборки.

generateStaticParams

Динамические маршруты объявляют, какие страницы создавать при сборке. В sitelo (dev) динамические маршруты по-прежнему рендерятся по запросу, без перечисления каждого параметра.

import { html, body, h1 } from 'javascript-to-html'

export function generateStaticParams() {
  return [
    { slug: 'hello-world' },
    { slug: 'my-first-post' },
  ]
}

export default ({ params }) =>
  html(
    body(h1(params.slug))
  )

Значениями могут быть строки, числа или логические значения — они приводятся к строке и кодируются для URL. Перехватывающие параметры принимают массивы ({ path: ['a', 'b'] }) или строки с косой чертой ({ path: 'a/b' }).

Динамическая страница, не создавшая ни одного маршрута, выводит предупреждение, чтобы не исчезнуть с сайта незаметно.