feat: 约定式菜单应该遵循文件夹结构
Description
-
当设置
mode: 'site'且存在以下文档文件结构:- docs - docs0 - docs01 - docs011 - a.md - b.md - docs012 - a.md - b.md -
根据现有
next版本将生成以下侧边栏:- 1/docs011 - a - b - 1/docs012 - a - b期望的行为是:
- docs1/docs011 - a - b - docs01/docs012 - a - b
以上在 mode: doc 下正常,即能够展示完整的文件夹名称。
Solution
为什么有 pr #405?
上文阐述问题本质是在 site 模式下的 group.title 在 特定情况下(子文件夹名称和父级名称有重合) 非预期的替换,因为在用户侧已经知晓约定式菜单的情况下,仍保留前缀名称,那么用户也是希望在生成的菜单中保留前缀,而不是被非预期的删除,当用户希望删除前缀时,自然会删除文件夹名称中的前缀。
方案
根据对源码参考,在 mode: site 有以下专有处理:
-
site 模式的专有 nav 预处理:
https://github.com/umijs/dumi/blob/863dee2d73a6274ddb255f3320c22bca2b20c417/packages/preset-dumi/src/routes/decorator/index.ts#L74
https://github.com/umijs/dumi/blob/863dee2d73a6274ddb255f3320c22bca2b20c417/packages/preset-dumi/src/routes/decorator/nav.ts#L4-L5
-
group title
https://github.com/umijs/dumi/blob/863dee2d73a6274ddb255f3320c22bca2b20c417/packages/preset-dumi/src/routes/decorator/index.ts#L75
https://github.com/umijs/dumi/blob/863dee2d73a6274ddb255f3320c22bca2b20c417/packages/preset-dumi/src/routes/decorator/group.ts#L91
另外从本意上来看,对于 site 模式下作者额外生成的 meta.nav 将用于 site 模式下头部 nav 的生成。后续的非预期替换应该也不是作者的本意?
https://github.com/umijs/dumi/blob/863dee2d73a6274ddb255f3320c22bca2b20c417/packages/preset-dumi/src/routes/decorator/group.ts#L89-L91
这里的删除应该只对 doc 模式生效,因为在 site 模式下,group path 中与 nav path 重复的部分已经在 group title 生成前就已经不存在了,所以在 site 模式下没有必要再走一次 nav path 替换,否则当父级与子级文件名重复时,将会出现前文所述非预期删除。
后续影响
后续在 site 模式下,markdown 中的 nav.path 指定将 不再* 影响(现有 next 版本有上述影响)侧边栏的生成,详情可见单测用例 rewrite 路由。
PR 典范,我仔细看下👍
感谢贡献,dumi v1 不再更新,issue 关闭