dumi icon indicating copy to clipboard operation
dumi copied to clipboard

feat: 约定式菜单应该遵循文件夹结构

Open lbwa opened this issue 5 years ago • 1 comments

Description

  1. 当设置 mode: 'site' 且存在以下文档文件结构:

    - docs
      - docs0
        - docs01
           - docs011
             - a.md
             - b.md
           - docs012
             - a.md
             - b.md
    
  2. 根据现有 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 有以下专有处理:

  1. 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

  2. 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 路由

lbwa avatar Dec 04 '20 02:12 lbwa

PR 典范,我仔细看下👍

PeachScript avatar Dec 04 '20 06:12 PeachScript

感谢贡献,dumi v1 不再更新,issue 关闭

PeachScript avatar Jan 28 '23 10:01 PeachScript