@@ -6,43 +6,84 @@ order: 3
6
6
7
7
# 约定式路由
8
8
9
- 为了使得路由生成更容易理解、更易于控制, dumi 对 Markdown 文档的目录解析做了『文档路由』及『资产路由』的概念拆分。
9
+ 即根据路由文件路径自动生成路由,是 dumi 默认且推荐使用的路由模式。在 dumi 里,约定式路由一共有 3 种读取方式,分别是:
10
10
11
- 默认情况下,` docs ` 目录下的 Markdown 文档及` .dumi/pages ` 下的 React 组件会根据目录结构解析为文档路由,` src ` 目录下第一层级的 Markdown 文档会被解析为 ` /components ` 下的资产路由,我们可以通过配置项 ` resolve.atomDirs ` 对资产路由前缀及解析目录进行更改。
11
+ | 类型 | 默认读取路径 | 适用场景及特点 |
12
+ | ---------------------------------------------------- | ------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
13
+ | 文档路由 | ` docs ` | 适用于普通文档生成路由,路径下的文档会根据嵌套结构自动识别并归类到不同的导航类目下 |
14
+ | 资产路由 | ` src ` | 适用于资产(比如组件或 hooks)文档的生成,路径下** 第一层级** 的文档会被识别并归类到指定的类别下,dumi 默认会将 ` src ` 下的文档都归类到 ` /components ` 下 |
15
+ | <span style =" white-space : nowrap ;" >React 路由</span > | <span style =" white-space : nowrap ;" >` .dumi/pages ` </span > | 适用于为当前站点添加额外的、无法用 Markdown 编写的复杂页面,这些页面必须使用 React 编写,识别规则与文档路由一致 |
12
16
13
- 举几个例子方便理解:
17
+ ## 路由识别及转换
14
18
15
- | 磁盘路径 | 解析结果 |
16
- | ----------------------------------- | --------------------------------------------------- |
17
- | /path/to/.dumi/pages/hello.tsx | - 导航:Hello<br >- 页面路由:/hello |
18
- | /path/to/docs/hello.md | - 导航:Hello<br >- 页面路由:/hello |
19
- | /path/to/docs/hello/index.md | - 导航:Hello<br >- 页面路由:/hello |
20
- | /path/to/docs/hello/world/dumi.md | - 导航:Hello<br >- 页面路由:/hello/world/dumi |
21
- | /path/to/src/hello.md | - 导航:Components<br >- 页面路由:/components/hello |
22
- | /path/to/src/hello/index.md | - 导航:Components<br >- 页面路由:/components/hello |
23
- | /path/to/src/hello/world.md | 不识别 |
24
- | /path/to/src/hello/another/world.md | 不识别 |
19
+ dumi 的路由识别规则如下:
25
20
26
- 除此之外,以下内容也不会被识别:
21
+ - 在识别文档路由时,dumi 会自动过滤掉以 ` . ` 和 ` _ ` 开头的文件及文件夹,仅识别 ` .md ` 后缀的文件,识别路径可通过 [ ` resolve.docDirs ` ] ( ../config/index.md#resolve ) 进行修改;
22
+ - 在识别资产路由时,dumi 仅识别第一层级的 ` .md ` 文件及第二层级的 ` index.md ` 、` README.md ` 文件,并自动为路由路径加上资产类别前缀(` type ` 配置项),识别路径及资产类别前缀可通过 [ ` resolve.atomDirs ` ] ( ../config/index.md#resolve ) 进行修改;
23
+ - 在识别 React 路由时,dumi 会自动过滤掉以 ` . ` 和 ` _ ` 开头的文件及文件夹,仅识别 ` .tsx ` 、` .ts ` 、` .jsx ` 和 ` .js ` 后缀的文件,过滤规则可通过 [ ` conventionRoutes.exclude ` ] ( ../config/index.md#conventionroutes ) 进行修改。
27
24
28
- 1 . 以 ` . ` 开头的目录及文档
29
- 2 . 以 ` _ ` 开头的目录及文档
25
+ 除此之外,为了使得 URL 更加友好,dumi 会自动将文件路径中的驼峰命令(CamelCase)转换为中划线命名(kebab-case),例如 ` docs/HelloWorld.md ` 最终会生成 ` /hello-world ` 。
30
26
31
- ### 自定义导航、分组和标题
27
+ ## 文档标题及排序
32
28
33
- 如果希望控制导航/分组/页面标题的生成,可以通过** 在 Markdown 文件顶部** 编写 FrontMatter 实现:
29
+ dumi 会自动将 Markdown 文件中的第一个标题作为该文档的标题,如果没有标题,则会使用文件名作为标题,以及在同一导航类目、同一菜单分组下的文档,默认按照字典序排序。
30
+
31
+ 这两者都可以在该文档的 Markdown 源文件头部通过 FrontMatter 手动指定,比如:
32
+
33
+ ``` md
34
+ title: 文档标题
35
+ order: 1 <!-- order 越小越靠前,默认为 0 -->
36
+ ```
37
+
38
+ ## 导航归类及生成
39
+
40
+ dumi 始终以路由路径作为导航归类的依据,拥有相同父级路径的文档会被归类到同一个导航类目下,例如 ` /config ` 和 ` /config/advanced ` 会被归类到 ` Config ` 导航类目下。
41
+
42
+ 导航的名称默认为该导航类目下第一篇文档的分组标题或文档标题,导航的排序默认按照字典序排序,这两者都可以在该导航类目下** 任一文档** 的 Markdown 源文件头部通过 FrontMatter 指定,比如:
34
43
35
44
``` md
36
45
---
37
- title: 自定义页面名称
38
- order: 控制页面顺序,数字越小越靠前,默认以路径长度和字典序排序
46
+ # 单独设置导航名称
47
+ nav: 配置项
48
+ # 同时设置导航名称和顺序,order 越小越靠前,默认为 0
39
49
nav:
40
- title: 自定义导航名称
41
- order: 控制导航顺序,数字越小越靠前,默认以路径长度和字典序排序
42
- group:
43
- title: 自定义分组名称
44
- order: 控制分组顺序,数字越小越靠前,默认以路径长度和字典序排序
50
+ title: 配置项
51
+ order: 1
45
52
---
53
+ ```
54
+
55
+ 需要注意的是,目前 dumi 尚不支持二级导航,所以如果路由路径存在超过 2 层嵌套,则会会从第 2 层开始形成新的一级导航,这并非推荐的用法,请耐心等待 dumi 对二级导航的原生支持。
56
+
57
+ ## 菜单归类及生成
46
58
47
- <!-- 其他 Markdown 内容 -->
59
+ dumi 默认会将同一导航类目下的所有文档都归类到默认菜单分组下,默认菜单分组没有分组名称,且默认排序会先于其他分组。
60
+
61
+ 倘若你的文档比较多,希望像这篇文档左边的菜单一样,将相关联的文档归类到同一菜单分组下,可以在相关文档的 Markdown 源文件头部通过 FrontMatter 指定它的分组及分组顺序,比如:
62
+
63
+ ``` md
64
+ ---
65
+ # 单独设置分组名称
66
+ group: 基础
67
+ # 同时设置分组名称和顺序,order 越小越靠前,默认为 0
68
+ group:
69
+ title: 基础
70
+ order: 1
71
+ ---
48
72
```
73
+
74
+ 与导航不同的是,需要归类的每一篇文档都需要设置菜单分组名称,但菜单分组顺序仅需要** 任一文档** 设置即可生效。
75
+
76
+ ## 解析示例
77
+
78
+ | 磁盘路径 | 路由类别 | 解析结果 |
79
+ | -------------------------- | ---------- | --------------------------------------------------------- |
80
+ | docs/hello.md | 文档路由 | - 导航:Hello<br >- 页面路由:/hello |
81
+ | docs/hello/index.md | 文档路由 | - 导航:Hello<br >- 页面路由:/hello |
82
+ | docs/hello/world/dumi.md | 文档路由 | - 导航:Hello<br >- 页面路由:/hello/world/dumi |
83
+ | src/HelloWorld.md | 资产路由 | - 导航:Components<br >- 页面路由:/components/hello-world |
84
+ | src/HelloWorld/index.md | 资产路由 | - 导航:Components<br >- 页面路由:/components/hello-world |
85
+ | .dumi/pages/hello.tsx | React 路由 | - 导航:Hello<br >- 页面路由:/hello |
86
+ | docs/\_ hello.md | -- | 不识别,原因:以 ` _ ` 开头 |
87
+ | src/hello/world.md | -- | 不识别,原因:资产路由只识别第一层级 |
88
+ | src/hello/another/index.md | -- | 不识别,原因:资产路由只识别第一层级 |
89
+ | .dumi/pages/hello.md | -- | 不识别,原因:React 路由不识别 ` .md ` 后缀 |
0 commit comments