本文档说明 zeka-stack.github.io 文档站点应该如何组织内容,尤其是 sync-docs.sh 的同步机制、目录约定、菜单生成方式和常见注意事项。
站点里的文档,可以分为两类:
- 来源于各源码模块中的
README.md和docs/目录 - 通过
sync-docs.sh同步到文档站点 - 通常不应该在站点仓库中手动修改这些同步产物
- 直接放在文档站点仓库本体中
- 典型目录包括
guide/、about/、action/ - 这些内容不会被源码同步覆盖,可以直接维护
简单原则:模块文档看源码仓,站点独有文档看站点仓。
当前脚本默认只处理 4 个顶级目录:
arco-meta/blen-kernel/cubo-starter/cubo-starter-examples/
其他目录不在自动同步范围内,需要在站点仓库中手动维护。
脚本主要通过以下条件判断一个目录是否应该被同步:
- 是否在上述目标目录下
- 是否存在
pom.xml - 是否存在
README.md - 是否存在子模块目录或
docs/目录
因此,一个源码目录要成为站点模块页,通常至少需要:
pom.xmlREADME.md
根据目录结构不同,同步结果也会不同:
例如:
cubo-starter/cubo-logsystem-spring-boot/
├── README.md
└── docs/
├── 1.xxx.md
└── 2.xxx.md
同步后通常会生成:
cubo-starter/cubo-logsystem-spring-boot/index.mdcubo-starter/cubo-logsystem-spring-boot/1.xxx.mdcubo-starter/cubo-logsystem-spring-boot/2.xxx.md
如果某模块只有 README.md,没有 docs/,同步后通常只会生成:
index.md
如果源码目录中有 imgs/,同步脚本也会一并处理。
如果要新增模块文档,推荐保持以下结构:
模块目录/
├── README.md
├── imgs/
│ └── xxx.webp
└── docs/
├── 1.xxx.md
└── 2.xxx.md
这样同步后既能生成主页面,也能自然形成子文档菜单。
站点独有内容建议统一放在站点仓库本体中,例如:
zeka-stack.github.io/
├── guide/
│ ├── index.md
│ ├── 1.introduction.md
│ ├── 2.quick-start.md
│ ├── 3.resources.md
│ └── 4.docs-organization.md
├── about/
│ └── index.md
└── action/
└── index.md
例如:
1.introduction.md2.quick-start.md3.resources.md
编号主要用于控制菜单顺序。
推荐使用:
- 英文小写
- 中划线
-分隔 - 结构清晰、简短明确
不推荐使用:
- 空格
- 反斜杠
- 引号
- 过长或过复杂的命名
站点使用了 @nolebase/markdown-it-bi-directional-links,因此双向链接路径必须对应站点最终文件结构。
例如最终文件路径是:
zeka-stack.github.io/arco-meta/arco-builder/index.md
链接就应该写:
[[arco-meta/arco-builder/index|构建框架总览]]
如果目标页面是某个目录下的 index.md,不要写成目录名本身,而应该写完整路径,例如:
[[cubo-starter/cubo-logsystem-spring-boot/index|日志系统]]
如果目标是模块下某个补充文档,例如:
[[arco-meta/arco-maven-plugin/arco-container-maven-plugin/detail-docker-build-guide|Docker 构建指南]]
不要使用旧别名或自己猜测的文件名。
sync-docs.sh 除了搬文件,还会自动做以下事情:
- 为缺少 frontmatter 的文件补充
published日期 - 为缺少徽标的文档补充项目徽标
- 为 README 同步后的页面补充 GitHub 代码示例链接
因此,源码 README 里不需要重复手写这些公共装饰内容。
- 在源码模块下补充
README.md或docs/*.md - 确保目录结构清晰
- 执行
npm run sync - 在本地运行
pnpm run dev - 检查菜单和链接是否正确
- 在站点仓库本体目录下新增
.md文件 - 使用编号前缀控制顺序
- 确认该目录已经在配置中进入侧边栏
- 在本地运行
pnpm run dev - 检查菜单和链接
源码中的相对路径,不一定就是站点最终路径。同步后很多模块页面会变成 index.md,层级也会发生调整。
当目标是一个目录的主页时,必须写成 /index,否则可能匹配不到真实文件。
如果文件已经被重命名,链接也必须同步更新,不能继续沿用历史名称。
双向链接是否正常,不能只看 GitHub 仓库,还要以 pnpm run dev 实际结果为准。
ArticleMetadata 里的“更新于”依赖 VitePress 注入的 lastUpdated,而 lastUpdated 来源于 Git 提交时间。
如果文档文件未纳入 Git 管理(例如被 .gitignore 忽略,或改动后未提交),该字段可能为空或异常,从而显示 1970.01.01。
排查顺序建议:
- 检查
.gitignore是否误忽略了.md文件; - 用
git check-ignore -v <file>验证忽略来源; - 确认文件已被 Git 跟踪并提交(
git status/git log -- <file>); - 重新构建或部署文档站点。
- 模块文档从源码仓维护
- 补充文档优先放在模块的
docs/目录下 - 双向链接始终写同步后的真实站点路径
- 新增或调整链接后,至少跑一次
pnpm run dev验证