Rotas
As rotas vêm diretamente do sistema de ficheiros, dentro de 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.htmlTabela de rotas
| Funcionalidade | Ficheiro | URL |
|---|---|---|
| Estática | index.ht.js | / |
| Aninhada | blog/index.ht.js | /blog |
| Dinâmica | blog/[slug].ht.js | /blog/my-post |
| Vários parâmetros | blog/[year]/[slug].ht.js | /blog/2026/my-post |
| Apanha-tudo | docs/[...path].ht.js | /docs/api/auth |
| Apanha-tudo opcional | docs/[...path]?.ht.js | /docs + níveis abaixo |
| Grupos de rotas | (admin)/users.ht.js | /users |
Ganha a rota mais específica: a estática vence a dinâmica, e a dinâmica vence as apanha-tudo. Dois ficheiros a gerar o mesmo URL são um erro de compilação.
generateStaticParams
As rotas dinâmicas declaram que páginas emitir na compilação. Em sitelo (dev), as rotas dinâmicas continuam a ser renderizadas a pedido, sem listar cada parâmetro.
export function generateStaticParams() {
return [
{ slug: 'hello-world' },
{ slug: 'my-first-post' },
]
}
export default ({ params }) => `
<html><body><h1>${params.slug}</h1></body></html>
`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))
)export function generateStaticParams() {
return [
{ slug: 'hello-world' },
{ slug: 'my-first-post' },
]
}
export default function Post({ params }) {
return (
<html>
<body>
<h1>{params.slug}</h1>
</body>
</html>
)
}Os valores podem ser strings, números ou booleanos — são convertidos em string e codificados para o URL. Os parâmetros apanha-tudo aceitam arrays ({ path: ['a', 'b'] }) ou strings separadas por barras ({ path: 'a/b' }).
Uma página dinâmica que não gera nenhuma rota mostra um aviso, para não desaparecer do teu site sem se dar por isso.