您现在的位置是:亿华云 > 应用开发
对比三个强大的组件文档展示工具
亿华云2025-10-09 03:39:17【应用开发】8人已围观
简介背景前段时间, 部门在热火朝天的搞各类组件库。做组件库,不可避免的就需要做组件的展示和说明, 要用到一些文档工具。我们项目里面也尝试了几种不同的文档工具,今天和大家分享一些经验, 希望对大家有所帮助。
背景
前段时间,对比 部门在热火朝天的个强工具搞各类组件库。
做组件库,组件展示不可避免的文档就需要做组件的展示和说明, 要用到一些文档工具。对比
我们项目里面也尝试了几种不同的个强工具文档工具,今天和大家分享一些经验,组件展示 希望对大家有所帮助。文档
正文
目前,对比 我们的个强工具组件库 一共使用了三种文档工具, 分别是组件展示:
Story Book Docz Dumi下面我会根据实际的使用情况,对这三种工具做一些对比 并给出一些结论。文档
1. Story Book
StoryBook 提供了一套UI组件的对比开发环境。
它允许你浏览组件库,个强工具查看每个组件的组件展示不同状态,以及交互式开发和测试组件, 目前支持 react、vue、angular 等前端类库和框架。
代码示例
// Button.stories.tsx import React from react; import { Story } from @storybook/react; // We create a “template” of how args map to rendering const Template: Story<ButtonProps> = (args) => <Button { ...args} />; export const Primary = Template.bind({ }); Primary.args = { primary: true, label: Primary, };storybook 提供可以交互的组件编写,通过 Template.bind({ }) 进行组件的绑定,通过 args暴露可交互的属性。云南idc服务商
且支持的组件库丰富,但是文档的编写除了需要提供示例外,还需要兼容可交互的模式。
渲染示例
比如我们的 SSC-UI-Vue-Pro 组件库:
2. docz
Docz 是一个高效、零配置的事件记录工具。
Docz 基于 MDX ,有许多内置的组件可以帮助你记录你的事情。
它同时支持添加插件,以便于通过 Docz 流程和数据管控很多事情。
代码示例
// Button.mdx import { Playground } from docz import { Button } from ./Button # Button ## Basic usage <Playground> <Button>Click me</Button> <Button kind="secondary">Click me</Button> </Playground>渲染示例
这是官网的一个示例,可以看出代码的示例需要写在 Playground 标签里面,服务器托管由此带来一个问题,无法在代码示例中写引入模块,这其实对开发者不太友好。
我们的 SSC-UI-React 组件库使用了docz, 实际效果:

3. dumi
dumi 是一款为组件开发场景而生的文档工具。
其具有开箱即用,将注意力集中在组件开发和文档编写上。
基于 TypeScript 类型定义,自动生成组件 API、移动端组件库编写及多语言支持。
代码示例
在类型定义中:

渲染示例


总体对比
以下为三个库的特性对比:
综上所述,愉快地决定将 React Pro Components 组件库文档迁移到 dumi 中。
踩坑总结
1. React 版本不兼容问题
一通迁移操作后,我们 yarn 了一下,发现报错了:

这是 ts 报出的关于 react 类型检查的错误,一开始认为是 ts 检查多了,那么在tsconfig.json 配置 excluded:[node-modules],将这个检查去掉,但是配完了仍然不好使。
经过一通细致的检查,在 yarn.lock 中发现组件库依赖的 react 版本是 16,而 dumi 依赖的亿华云 react 版本是*,*的版本下载了 17 版本的 react,由于两个版本的 react 的 ts 类型不同,导致了类型检查不通过。



既然如此,我们只要显示指定 react 的版本为 16 就行了,16 在 * 的范围,也不会导致 dumi 有错误。
在 package.json 中加入:
"resolutions": { "@types/react": "^16.9.23" }即可。
2.文档引用问题
由于 dumi 的文档是面向用户的,因此写文档时引入组件的方法,举例:
如 Button 组件为:
import { EditArea } from react-pro-components由于这里引入的是 node_module 的包,这使得组件库的更改无法映射到文档中,需要添加别名映射。
在 .umirc.ts 中添加:
const path = require(path); const chainWebpack = require(webpack-chain); export default { // 其他配置 chainWebpack(memo) { // 设置 alias memo.resolve .alias .set(react-pro-components, path.resolve(__dirname, src, components)) }, };3. 其他问题
1.dumi 是否支持 api 文档的部分属性隐藏呢?
暂不支持
2.dumi 是否支持搜索呢?
site 模式支持,doc 模式暂不支持。
3.dumi 是否 md 文档单独放在组件目录下的一个文件夹下呢?
暂不支持,需要直接放在组件目录下,如 Button 组件:
├── Button │ └── index.md结论
经多对比之后, 我们把一个 React 组件库 迁移到了 dumi, 并取得了不错的效果。
有需要做 React 组件库的小伙伴可以留意下dumi.
至于 Vue 组件文档库, 大家就根据自己的情况灵活选择吧。
希望这篇文章能对大家有所帮助, 谢谢。
很赞哦!(4949)
相关文章
- 比较短的域名方便用户记忆和传播,它带来的好处往往会超过其他类型的域名,如果你非要域名短而且还要包含关键词,那么往往会事与愿违,现在这种域名基本上是可遇而不可求的。
- 我是Redis,MySQL大哥被我害惨了!
- 想批量注册域名有哪些辅助的域名查询工具?
- 什么样的数字域名是精品数字域名?
- 3、商标域名一经注册,就可以作为域名裁决过程中的主要信息之一。这可以大大增加公司被抢注的相关域名胜诉的机会。
- Linux下MySQL 8.0安装配置
- Redis的跳跃表确定不了解下吗?
- 子域名是干嘛的?2021年子域名的价值分析
- 5. 四种状态过后,域名管理机构释放域名给公众注册。
- .com域名将全球涨价,那么cn域名注册价格是多少呢?