路由

路由直接来自 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' })。

没有生成任何路由的动态页面会打印一条警告,免得它从站点里悄无声息地消失。