一个 Web Device 站点不是一份巨大的页面配置。它把三个不同的职责放进三个目录:页面声明放在 pages/,读者要访问的内容对象放在 content/,站点自身的配置、组件和视觉系统放在 .web/。
| 位置 | 负责什么 | 不应放什么 |
|---|---|---|
pages/ | 页面入口、页面 layout、页面级 SEO 与列表/详情的呈现规则 | 文章或产品正文 |
content/ | 有身份的内容对象及其正文、front matter、标签和关系 | 全站组件实现 |
.web/ | 全站配置、站点组件、tokens、主题和模板资产 | 每一篇内容的正文 |
.route/ | 把 blocklet 的 Web 入口声明给本地或发布运行时 | 页面实现或内容数据 |
最小目录可以是:
my-site/
├── .route/
│ └── web
├── .web/
│ ├── site.yaml
│ └── components/
│ └── site-home/
├── pages/
│ └── index/
│ └── layout.aup
└── content/
└── articles/
└── first-post/
└── content.md先判断职责,再选择目录
按这个顺序判断文件应放在哪里:
- 它是否定义一个站点 URL 的呈现?放进
pages/<name>/。 - 它是否是有标题、slug、正文或关系、将被列表和详情页消费的对象?放进
content/<type>/<slug>/。 - 它是否影响多个页面的视觉、组件、配置或模板?放进
.web/。 - 它是否只是把当前目录交给 Web runtime?放进
.route/,而不是把部署信息写进内容或 layout。
这个区分的实际好处是:同一个内容对象可被多个页面或组件引用,而不需要把正文复制进 layout;同一个组件可被多个页面调用,而不需要让每一个内容对象携带 UI。
页面和内容不是一回事
pages/index/ 通常对应首页;一个普通 pages/about/ 目录对应 /about/ 的页面入口。运行时也会从 content/<type>/ 发现集合类型,因此内容集合可以带来列表和详情路由;它不意味着每个内容目录都是一份手工页面。
pages/ 中的页面结构和 content/ 中的对象结构可以独立演进。例如,文章可以继续留在 content/articles/,而站点随后添加另一种首页或列表 layout。不要为了改变显示方式移动原始内容。
.web/ 是站点层,不是第二个内容库
当前 runtime 把 .web/site.yaml 当作站点级配置的单文件形式;locale、locales、render mode、颜色方案、评论开关,以及 SEO、template、theme 等都有明确的站点层位置。tokens.json、redirects 和 template/logo.svg 仍是独立文件,因为它们分别是设计 token、行式重定向规则和二进制/文本资产。
站点组件位于 .web/components/。页面 AUP layout 组合这些组件。runtime 另有一条可直接静态渲染受支持 native AUP node 的 static-tree 路径;这不意味着任意 native node 都可作为页面 layout section。组件仍是承载可复用网页 HTML、样式与交互的站点层。详见用 AUP 建立页面。
接下来阅读
- 要让一个页面真正渲染,继续读用 AUP 建立页面。
- 要创建可被页面消费的文章、文档或产品对象,继续读内容对象、元数据与语言。
- 要核对路径、语言前缀与保留路由,继续读路由、导航与语言。
本页描述 ARC 2.0.0-beta.25 的目录读取边界。旧 Cookbook 或历史站点可能使用兼容文件布局;在迁移前先运行本地检查,而不是把历史目录约定当作新站点模板。