Routing

Le rotte arrivano direttamente dal filesystem, sotto 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

Tabella delle rotte

CaratteristicaFileURL
Staticaindex.ht.js/
Annidatablog/index.ht.js/blog
Dinamicablog/[slug].ht.js/blog/my-post
Più parametriblog/[year]/[slug].ht.js/blog/2026/my-post
Catch-alldocs/[...path].ht.js/docs/api/auth
Catch-all opzionaledocs/[...path]?.ht.js/docs + più in profondità
Gruppi di rotte(admin)/users.ht.js/users

Vincono le rotte più specifiche: la statica batte la dinamica, la dinamica batte i catch-all. Due file che generano lo stesso URL sono un errore di build.

generateStaticParams

Le rotte dinamiche dichiarano quali pagine produrre in fase di build. Con sitelo (sviluppo) le rotte dinamiche continuano a renderizzarsi su richiesta, senza elencare ogni parametro.

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))
  )

I valori possono essere stringhe, numeri o booleani — vengono convertiti in stringa e codificati per l’URL. I parametri catch-all accettano array ({ path: ['a', 'b'] }) oppure stringhe separate da barre ({ path: 'a/b' }).

Una pagina dinamica che genera zero rotte stampa un avviso, così non può sparire in silenzio dal tuo sito.