[RFC] dumi 2.0 theme system #1180
Closed
PeachScript
started this conversation in
Ideas
Replies: 2 comments 3 replies
-
1、有没有一些动态判断的方法,比如说我只要在某个文档的右侧加上广告位,这个要怎么实现? |
Beta Was this translation helpful? Give feedback.
1 reply
-
多层级菜单配置可以支持了吗,或者类似docsify提供菜单自定义配置也行 https://docsify.js.org/#/more-pages?id=sidebar |
Beta Was this translation helpful? Give feedback.
2 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
dumi 1.0 主题方案存在的问题
dumi-theme-default
layouts/index.tsx
(用户文档)和layouts/demo.tsx
(用于 Demo 的独立访问页)dumi 2.0 主题方案
目录结构
基于以上结构,解决 1.0 存在的问题:
slots
下组件的覆盖/包装实现dumi/theme-default/xx
引入locales
配合简易版useIntl
(用法类似@umijs/plugin-locale
)GlobalLayout
其中,
slots
、dumi/theme/xx
参考了 Docusaurus 的 Swizzing 设计,slots
的名称及概念借用了 Vue.js 的 slots主题包的加载逻辑
主题包的优先级从高到低排序:
.dumi/theme
下,与现在一致devDependencies
、dependencies
里找到的第一个dumi-theme-
或@org/dumi-theme-
的包其中各个模块的合并方式如下:
builtins
、layouts
、slots
永远是覆盖式加载,开发者可以在覆盖的组件里决定是重写还是包裹原有组件locales
按照单个 locale 文件合并加载,以实现局部覆盖文案的效果主题相关别名的解析逻辑
一共有 4 个别名:
dumi
,指向 dumi 提供的主题 API(也包括 umi 的 API),提供useIntl
之类的便于实现主题包的 APIdumi/theme/{layouts,builtins,slots}/xx
,指向主题解析的最终结果,包含本地主题,类似 Docusaurus 的@theme
dumi/theme-original/{layouts,builtins,slots}/xx
,指向三方主题包及插件修改后的最终结果,不含本地主题,借助.umi/dumi
的临时文件夹实现,类似 Docusaurus 的@theme-original
dumi/theme-default/xx
,指向 dumi 内置的主题包产物,可能就是真实存在的产物目录,类似 Docusaurus 的@theme-init
工具链
计划提供一个专门的脚手架以及
father
+father-plugin-dumi-theme
来提供 dumi 的主题包研发工具链,father 插件主要做以下事情:esm: { output: 'dist' }
layouts
和builtins
下的组件不允许相对路径直接相互引用、必须从dumi/theme-slots
引入,以确保未来主题包可被用户局部自定义暂时想到这些,欢迎提建议及补充 ❤️
Beta Was this translation helpful? Give feedback.
All reactions