目的:让 300 篇文档长得一样,可被检索、可被生成索引、可被未来的自己读懂。
| 规则 | 说明 | 正例 | 反例 |
|---|---|---|---|
| 一级目录用两位编号 | 00 路线、01-05 知识层、06 实战、07 复盘、08 辅助、99 办事清单、98 杂项 | 04-工程化 | 工程化2 |
| 二级目录必须编号 | 编号表示该主题在整个目录内的学习顺序 | 01-git、02-构建工具 | git、webpack |
| 每一篇文档都要编号 | 两位数字 + 短横线,编号即阅读顺序,不能跳号 | 05-Hooks.md | Hooks.md |
| 编号与内容排序一致 | 编号小 = 先学;新增文档按位置插入并顺延后面 | 10-事件循环 在 09-垃圾回收 之后 | 编号乱序 |
| 禁止副本式命名 | 用内容区分,不用 copy/1/最终 | RN面试-答案详解.md | RN面试 copy.md |
| 禁止占位式命名 | 文件名必须能说明内容 | 算法题-字符频率排序.md | 面试题1.md |
| 文件名内不留空格 | 空格用短横线替代,避免转义问题 | 36-CSS-2D转换.md | CSS 2D转换.md |
| 面试记录用日期前缀 | 唯一例外:04-真实面试经历/ 用 YYYYMMDD 代替编号,天然按时间排序 | 20251027 盾蓝科技 面试.md | 盾蓝面试.md |
为什么二级目录也编号:01-web开发 → 02-html → 03-css → 04-javascript → 05-typescript,光看目录名就知道先学谁,不必点进 README 找顺序。
为什么每篇都编号:没有编号时,CSS 3D转换 会排在 CSS 2D转换 前面(不同文件系统的排序规则还不同)。编号让顺序确定、可复现,也让索引脚本能直接按编号生成学习路径。
主题一致性:同一主题的「提纲」和「详解」用后缀区分——-题目清单 / -答案详解、-基础版 / -详细版。
新建知识文档时按此结构写,保证索引脚本能正确抓取标题和摘要:
---
title: 闭包
stage: P1
level: 进阶
status: done
tags: [javascript, 执行机制]
---
# 闭包
一句话定义,说明它解决什么问题。这一段会被索引脚本抓为「要点」。
## 基本概念
## 常见误区
## 面试问法
## 参考资料
# 一级标题 只能有一个,与文件名主题对应。js / ts / bash),方便高亮。| 字段 | 取值 | 用途 |
|---|---|---|
stage | P0-P5 | 对应学习阶段,可全局检索 |
level | 基础 / 进阶 / 原理 | 区分入门与深挖内容 |
status | done / draft / review | 标记完成度 |
tags | 数组 | 跨目录聚合(如 javascript) |
存量文档暂未批量注入 frontmatter,避免产生无法验证的元数据。批量注入脚本见下。 新增文档请按模板带上 frontmatter。
图片统一放在与该文档同级的 assets/ 目录,用相对路径引用:

/assets/xxx.png 这种根绝对路径。GitHub 能解析,但本地 VS Code / Typora 预览会全部裂图。这是历史遗留写法,已于 2026-11 全部改为相对路径。assets/ 已清空并弃用——所有图片一律跟随文档,放同级 assets/。真出现跨目录共用的图,再临时建根 assets/,同时在此处登记。find . -path "*/assets/*" -type f 的结果与全库 ![]() 引用比对,未被引用的及时删除(2026-11 清理过一次,删除 6 个文件共 1.1 MB)。新增、删除、重命名文档后执行:
python3 00-路线/tools/gen-index.py
脚本会重建 30 个二级目录的 README.md。手写索引的目录(00-08 一级目录、98-杂项、99-手册)不会被覆盖。
docs: 添加 XXX 文档
refactor: 重组目录结构
fix: 修复 XXX 图片失效
一次提交只做一件事:结构重组和内容新增不要混在同一次提交里。