Rutas
Las rutas salen directamente del sistema de archivos, 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.htmlTabla de rutas
| Función | Archivo | URL |
|---|---|---|
| Estática | index.ht.js | / |
| Anidada | blog/index.ht.js | /blog |
| Dinámica | blog/[slug].ht.js | /blog/my-post |
| Varios parámetros | blog/[year]/[slug].ht.js | /blog/2026/my-post |
| Comodín | docs/[...path].ht.js | /docs/api/auth |
| Comodín opcional | docs/[...path]?.ht.js | /docs + rutas más profundas |
| Grupos de rutas | (admin)/users.ht.js | /users |
Gana la ruta más específica: la estática vence a la dinámica, y la dinámica a los comodines. Que dos archivos generen la misma URL es un error de compilación.
generateStaticParams
Las rutas dinámicas declaran qué páginas emitir en tiempo de compilación. Con sitelo (dev), las rutas dinámicas se siguen renderizando bajo demanda sin necesidad de enumerar 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>
)
}Los valores pueden ser cadenas, números o booleanos — se convierten a cadena y se codifican para la URL. Los parámetros comodín aceptan arrays ({ path: ['a', 'b'] }) o cadenas separadas por barras ({ path: 'a/b' }).
Una página dinámica que no genera ninguna ruta muestra un aviso, para que no desaparezca de tu sitio en silencio.