Web Device 的路径首先来自站点的已声明结构,而不是散落在组件里的字符串。pages/ 贡献命名页面,content/<type>/ 贡献集合和详情对象;在多语言站点中,这些路径在 locale 视图下呈现。
基本路径模型
当前 runtime 使用下列基础规则:
| 声明 | 典型可服务路径 |
|---|---|
pages/index/ | 首页 / |
pages/about/ | 命名页 /about/ |
content/articles/first-post/ | 集合与详情路径,例如 articles/first-post/ |
| 有标签的内容集合 | articles/tags/<tag>/ 及其分页形式 |
| 已启用 archive 的集合 | 年/月归档路径 |
构建和多语言预览会把站点路径放进 locale 语境;例如一个有 en 和 zh 的站点可呈现 /en/about/ 与 /zh/about/。不要在每个内容对象里再造 en/、zh/ 目录来表达同一个内容的语言版本。
声明 locale
站点级默认语言和可用语言属于 .web/site.yaml:
locale: en
locales:
- en
- zh如果没有显式 locales,当前 runtime 也会从 .aup/locales/*.json 的文件名推导语言列表。这个回退适合兼容已有 app;新站点应在 site.yaml 明确声明要支持的语言,以便作者、构建和审阅者共享同一份范围。
内容正文使用 content.zh.md 一类的 locale 文件,页面 layout 使用 layout.zh.aup 一类的 locale 文件,页面 SEO 使用 seo/title.zh 与 seo/description.zh 一类的 locale 文件。它们都在原目录中覆盖默认版本;不要复制整个站点目录树。
导航与 URL 的边界
导航是读者如何发现页面的结构;路由是 runtime 能否服务一个 URL 的结构。两者经常相关,但不能互相代替:
- 在导航中增加一个链接,不会创建页面或内容对象;先保证目标路径有真实的 page 或 content 声明。
- 页面目录存在,也不自动代表它应在每一个导航菜单中出现;把公开信息架构作为显式的导航决定。
- 组件内硬编码
/zh/、/en/或某个内容 slug,会让新 locale、重命名和本地预览更脆弱。优先使用当前页面的 locale 与已解析的对象 route。
注意保留名称与集合冲突
Web Device 有已声明的内置或集合路由形状。search 是内置搜索路径;集合中 tags、page 和 feed.xml 也有专门语义。archive、pagination 或标签页启用后,某些本来可作为 slug 的路径会被路由规则遮蔽。
因此,建立集合前应先确定类型名和常见 slug;启用 archive、feed 或分页后,应重新跑构建和链接检查。不要把“目录能创建”误认为“每个 URL 都不会冲突”。
本地验收
- 在
.web/site.yaml写默认语言与显式语言列表。 - 添加一份默认内容和一份
content.<locale>.md。 - 为至少一个页面设置 locale 的 title/description,并在需要时设置 layout 变体。
- 运行
arc blocklet build .;检查生成的各语言页面与 sitemap。 - 用直接本地运行的 blocklet 打开每个语言页面、一个详情页和一条导航链接。
有关内容版本如何读取,见内容对象、元数据与语言;有关站点配置字段,见全站配置。