dumi 1.0 在 2020 年 3 月 2 日正式发布,到今天一共有 80+ 位 Contributor、提交 1100+ Commit、为近 4000 个开源项目提供了组件库/站点的文档方案;dumi 作为一个 GitHub 数亿开源项目中的渺小一粒,能有这么多人共同参与、能为这么多项目提供价值,无疑是十分幸运的。

与这份幸运一同到来的,还有许多体验问题的反馈、组件研发的思考、实际项目的场景,加上社区的底层技术栈也在飞速迭代,是时候给 dumi 做一次大升级了,所以我们在今年的 7 月 29 日正式启动了 dumi 2.0 的研发,而在今天,它终于与大家正式见面了!

核心升级

全新主题系统

先晒一下全新的默认主题,它也是主题系统的一部分:

除了更精致以外,dumi 2 的主题系统还提供了如下能力。

主题支持局部覆盖

在 dumi 1 里,想定制侧边栏就必须覆盖整个 Layout,成本非常高; dumi 2 参考 Docusaurus 的 Swizzing 设计、提供了 slots(UI 插槽)特性,只需要在项目里创建 .dumi/theme/slots/{SlotName} 就能实现对应 slot 的局部覆盖,并且提供哪些 slots 是由主题包决定的,在保持开放性的同时、极大地降低了定制成本。

自带国际化方案

在 dumi 1 里,主题包想做多语言,只能自行判断 locale 展示不同的文案; dumi 2 约定主题包内的 locales/{lang-LOCALE}.json 文件为国际化文案,会被框架自动加载,主题包组件只需要从 dumi 里导出 react-intl的相关 API,只需调用文案 key 即可实现文案的国际化。 不仅如此,文案也是支持 key 覆盖的,这意味着用户如果想定制主题包提供的文案,只需要创建 .dumi/theme/locales{lang-LOCALE}.json 覆盖对应 key 的文案即可。

支持注册 dumi 插件

主题包可能伴随着默认配置、甚至是框架能力扩展,所以 dumi 2 约定主题包的 plugin.ts 或 plugin/index.ts 为主题包的插件、会自动挂载,为主题包提供更加强大的定制能力。

更多信息欢迎移步官方文档查看:主题-如何工作。

内置全文搜索

静态站点的搜索一直是老大难的问题,社区一般就两种方案:

  1. 传统的标题搜索方案,因为生成 TOC 原本就需要采集标题,拿来做索引是顺理成章的,这也是 SSG 框架的常见做法,缺点是能搜到的东西太少
  2. 接入三方的搜索服务并且产出预渲染的 HTML 和 sitemap.xml,好处是能保证搜索质量,缺点是有一定门槛,例如 Algolia 就需要申请 AppKey

听起来都不完美,但 dumi 2 这次带来了第 3 种方案,既不需要接入三方服务、又能实现全文匹配、还不会导致产物尺寸增加,是真正开箱即用的全文搜索方案!

搜索的过程在 Service Worker 中进行,这意味着不需要担心搜索结果匹配引发性能问题、也可以离线部署,同时 dumi 也提供了搜索 API、可供主题包定制搜索结果的呈现。

约定式路由增强

dumi 1 被诟病最多的问题就是『路由生成难以控制』,配置完不跑一跑都不知道长什么样儿,所以 dumi 2 这次对约定式路由做了 3 大升级。

配置简化

去掉 Markdown FrontMatter 中的 nav.path 和 group.path 配置项,最终路由就是文件路径,简单明了。

概念拆分

将路由分为『文档路由』和『资产路由』,文档路由通常放在 docs 目录下,会嵌套层级,而资产路由通常放在 src 下,不会嵌套层级、且默认归类在某一前缀(比如 /components)下,比如:

docs/guide/getting-started.md 会生成 /guide/getting-started
src/Foo/index.md 会生成 /components/foo
复制代码

以上解析路径和资产路由前缀均可通过配置修改。

约定式 Tab

支持以约定式的形式为 Markdown 内容增加 Tab,比如 index.$tab-key.md 就会作为 index.md 的 Tab 呈现,可以帮助我们更好地组织文档内容的呈现:

不仅如此,Tab 也支持通过插件 API 注册,为更多功能的扩展提供了可能。

更好的编译性能

dumi 2 通过结合使用 Umi 4 MFSU、esbuild、SWC、持久缓存等方案,带来比 dumi 1 更快的编译速度。

另外,dumi 2 也使用最新的 Unified.js 生态重写了整个 Markdown 编译逻辑,还提供了对 remark 和 rehype 插件的配置能力,在高性能的同时也更加易于定制。

成为合格的 SSG

dumi 1 虽然本质上是 SSG(Static Site Generator),但实际上是异常偏科的,这次把本职工作勉强做合格:

  1. 支持页面级的 TDK 配置,且内置 Helmet 可做深度自定义
  2. 内置 404 页面
  3. 默认静态化全部页面
  4. 支持基于 React@18 Stream 的构建时预渲染
  5. ……

当然合格仍然是不够的,也希望大家能一起参与完善,既然是『为组件研发而生的静态站点框架』,那就组件研发和静态站点都不能落下。

终于『有面儿』了

回想起当初 dumi 取名的过程,还是觉得很神奇,一个代号可以是冰冷的字母,也可以是有温度的昵称。

不过这么久以来,dumi 一直都借用的 Umi 的 LOGO,是时候趁着 2.0 的全新升级,给这个有温度的昵称配上一张有温度的脸庞了:

这就是 dumi 的 LOGO,用扎实的文档撑起精致的组件,请记住它的模样,如果是脸盲就不强求了 :D

除了以上核心升级,dumi 2.0 还有非常多的细节改进,受限于篇幅就不再展开了,欢迎大家在官网文档和实际使用中慢慢发现。

立即上手

如果是 dumi 1.x 的项目,请参考升级文档升级到 dumi 2:d.umijs.org/guide/upgra… 如果是打算新建全新项目,请直接使用 create-dumi 脚手架:d.umijs.org/guide/initi…

dumi 2,它来了它来了它来了相关推荐

  1. 引入antd组件样式_如何使用 dumi 和 fatherbuild 创建组件库

    在这个文章中,将会简单的介绍如何使用 dumi 和 father-build 来创建组件库和维护组件库.最终我们会演示如何组织组件库的代码.还会输出一个简单的组件库. 脚手架初始化 新建一个空文件夹, ...

  2. dumi组件库打包总结

    最近在做页面抽成组件然后发布,期间也是遇到了很多问题和坑,现在顺便分享一下. dumi官网 dumi为组件开发场景而生的文档工具,这里注重分享打包的过程, father dumi使用father打包, ...

  3. 一个基于dumi搭建的react组件库,特别的开源组件项目,主要用于学习

    前言 在日常开发中,肯定会积累许许多多的业务组件在项目内,部分可以作为公共组件被抽离到公共组件库,但大部分或许与业务强相关,或许带有接口请求,并不适合抽离为公共组件,但仍需要有一个地方去展示这些组件的 ...

  4. 基于dumi和antd封装的易用组件库(每个人都应该有自己的组件库)

    首先说下哈,不是造轮子,从来也不提倡造轮子- 作为一名前端程序员,个人感觉轮子已经够多了,留下来的时间不如摸鱼,比如发发沸点.逛逛掘金,或者下班了陪陪女朋友 最近发现了一个好的工具 dumi 突然心血 ...

  5. Web 趋势榜:上周最热门的 10 大 Web 项目 - 210410

    大家好,我是你们的 猫哥,那个不喜欢吃鱼.又不喜欢喵 的超级猫 ~ GitHub 上面有个 Trending 榜 (趋势榜),在 Trending 页面,你可以看到最近一些热门的开源项目或者开发者,这 ...

  6. 写在2021: 值得关注/学习的前端框架和工具库

    前言 最近在知乎看到了这么个问题:学完Vue还有必要学习React和Node吗?[1], 有很奇妙的感觉,因为我在最开始入门前端时,也是以Vue入的门,在"学完"Vue之后, 我也 ...

  7. Vite + React 组件开发实践

    简介: 毫不夸张的说,Vite 给前端带来的绝对是一次革命性的变化.或者也可以说是 Vite 背后整合的 esbuild . Browser es modules.HMR.Pre-Bundling 等 ...

  8. 写好项目文档有多重要?关于我被百大 UP 主选中又放鸽子这档事

    论写好项目文档的重要性和方法. 还记得前段时间火遍全网的合成大西瓜游戏么? 其实当我刚刚听说这个游戏的时候,属于村里刚刚通网,当时这个游戏都已经在网上传遍了,而且也有同学扒光了源码,并公开到了 Git ...

  9. 十分钟学会制作一个漂亮的在线文档

    官网地址:dumi - 为组件开发场景而生的文档工具 - dumi 一.项目简介 二.项目特点 三.快速入门 (1)新建一个目录 (2)初始化组件库开发脚手架 (3)安装依赖 (4)启动项目 四.项目 ...

最新文章

  1. ios share extension 真机不显示_ios企业签名:APPGroups实现App之间数据共享
  2. linux iptables 数据流程详解 4表5链的关系
  3. mysql 分组数据_MySQL基础之分组数据
  4. 一个硬核分布式数据库公司:pingcap
  5. centos7 yum下载路径
  6. 虚拟主机linux系统404,虚拟主机404页面的设置方法!
  7. Bzoj4822 [Cqoi2017]老C的任务
  8. ReentrantLock可重入锁
  9. 支持Visual Studio 2008和.NET 3.5的企业类库4.0
  10. c语言程序设计在未来前景,转型背景下C程序设计课程的实施方案
  11. JS打开新的页面(当前页面打开、新的页面打开)
  12. 华硕主板装系统蓝屏_华硕台式电脑蓝屏怎么重装系统 华硕台式电脑蓝屏重装系统步骤...
  13. cad画多段线时不显示轨迹_CAD画多段线的时候看不到预览效果的解决方法
  14. Xbrowser远程登录Ubuntu闪退问题的解决方案
  15. 只有python扩展库才需要导入以后才能使用其中对象_只有Python扩展库才需要导入以后才能使用其中的对象,Python标准库不需要导入即可使用其中的所有对象和方法。...
  16. 51单片机c语言实践教程,51单片机C语言实验与实践教程.pdf
  17. Win7下虚拟机安装Mac OS X
  18. spring的shema文件如何读取
  19. 如何用老毛挑清除WINDOWS密码(以HP笔记本为例)
  20. 分享几个阿里云盘资源搜索引擎

热门文章

  1. 解决电脑安装wifi6被扩展阻止
  2. aspose.words更新目录
  3. 2019年3月-4月前端面试题汇总(持续更新中...)
  4. 句句诛心的博士论文致谢及女朋友回应的话
  5. MATLAB(四)初阶绘图
  6. 在uni-app中使用手机号一键登录
  7. MogaFX外汇储备以一年多来的最快速度增长
  8. blender怎样给平面或曲面自动贴图
  9. Unity VR游戏开发干货教程:VR中的交互方式
  10. html表格里面怎么合并单元格的快捷键,合并单元格快捷键:Excel怎么合并单元格...