工作原理
docdoc 的全链路只有三样东西:源目录 → 静态产物 → 托管服务器。这一章把三个环节一次讲清,后面所有命令与配置都是围绕这条链路的操作入口。
站点模型
一个 docdoc 站点是一次发布的完整文档站,由站点清单 docdoc.json 与若干语言目录构成:
my-docs/
docdoc.json # 站点清单:标题、语言、子文档、版权、图标
cn/ # 语言目录(单语言站点通常只有 cn)
index.md # 首页
guide.md # 某个页面
页面与标题
- 每个
.md文件渲染为一个页面;文件第一个一级标题(# 标题)成为页面标题,同时出现在正文开头、侧栏条目、搜索索引与上一页/下一页链接中 - 每个目录可以有一个
index.md作为目录页,点击侧栏中的目录名时打开的就是该页;没有index.md时目录仍出现在侧栏,条目链接到目录内排序后的第一个页面 - 页面 URL 由目录结构决定,扩展名
.md变为.html
子文档
站点清单里可以声明多个子文档,它们在页面顶部渲染为 Tab 栏,各自拥有独立的侧栏导航——用户手册、开发手册、API 参考可以共存于一个站点:
{
"title": { "cn": "产品文档" },
"languages": { "cn": "简体中文" },
"docs": [
{ "name": "manual", "path": "user_manual" },
{ "name": "api", "path": "api_references" }
]
}
声明了子文档后,URL 变为 <语言>/<name>/...;语言切换与侧栏渲染器声明等完整行为见站内搜索 ?子文档与多语言。
语言
languages 声明站点的语言({语言码: 显示名}),第一个语言是默认语言;多语言站点在 Header 右侧出现语言切换器,不同语言的目录与文件名一一对应。单语言站点无需感知语言目录以外的任何概念。
从源到站点
D2 渲染失败,查看源码
direction: right
src: Source
src.local: Local directory
src.git: Git repository
build: "docdoc build"
artifact: Artifact {
pages: Static pages
tree: "tree.json"
idx: "index.json"
}
add: "docdoc add"
serve: "docdoc serve"
reader: Reader
src.local -> build -> artifact -> add: upload artifact
src.git -> add: clone and build on server
add -> serve: register site
serve -> reader: domain / path prefix
关键事实
- 构建是一次性的:
build读取源目录,把页面、目录树、搜索索引落盘为静态产物;源文件之后的变化不会自动反映到产物 - 注册表:服务器在数据目录中维护站点注册表,
add登记站点、del移除;进程重启不丢注册信息 - 两条发布路径:本地源在提交前先在本地完成构建再上传产物包;git 源则把地址交给服务器,由服务器克隆并构建
- 预览与正式托管同源:
preview与serve使用同一套托管逻辑,本地预览看到的行为即线上行为
访问方式
注册到服务器后,站点有两种访问入口:
- 域名路由:注册时携带
--domain,该域名的请求直接落在此站点根 - 路径前缀:默认按
http://服务器:端口/<站点名>/访问
