文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

对比三个强大的组件文档展示工具

2024-12-03 04:37

关注

做组件库,不可避免的就需要做组件的展示和说明, 要用到一些文档工具。

我们项目里面也尝试了几种不同的文档工具,今天和大家分享一些经验, 希望对大家有所帮助。

正文

目前, 我们的组件库 一共使用了三种文档工具, 分别是:

  1. Story Book
  2. Docz
  3. Dumi

下面我会根据实际的使用情况,对这三种工具做一些对比 并给出一些结论。

1. Story Book

StoryBook 提供了一套UI组件的开发环境。

它允许你浏览组件库,查看每个组件的不同状态,以及交互式开发和测试组件, 目前支持 react、vue、angular 等前端类库和框架。

代码示例

  1. // Button.stories.tsx 
  2. import React from 'react'
  3. import { Story } from '@storybook/react'
  4.  
  5. // We create a “template” of how args map to rendering 
  6. const Template: Story = (args) => 
  7.  
  8. export const Primary = Template.bind({}); 
  9.  
  10. Primary.args = { 
  11.   primarytrue
  12.   label: 'Primary'
  13. }; 

 storybook 提供可以交互的组件编写,通过 Template.bind({}) 进行组件的绑定,通过 args暴露可交互的属性。

且支持的组件库丰富,但是文档的编写除了需要提供示例外,还需要兼容可交互的模式。

渲染示例

比如我们的 SSC-UI-Vue-Pro 组件库:

  1. import STrackingHistory from './tracking-history.vue'
  2. import './style/index.less'
  3.  
  4. export default { 
  5.   title: 'Design System/展示/TrackingHistory'
  6.   component: STrackingHistory, 
  7.   parameters: { 
  8.     docs: { 
  9.       description: { 
  10.         component: '订单历史追踪,主要按时间和状态维度跟进'
  11.       }, 
  12.     }, 
  13.     design: { 
  14.       type: 'figma'
  15.       url: 
  16.         'https://www.figma.com/file/zi4Lcb2H2K5JikFKeEvPD7/WMS%E5%85%B8%E5%9E%8B%E6%A8%A1%E6%9D%BFV1.1?node-id=2974%3A595'
  17.     }, 
  18.   }, 
  19.   argTypes: { 
  20.     title: { 
  21.       control: 'text'
  22.       description: '内容,必填'
  23.       type: { required: true }, 
  24.     }, 
  25.     list: { 
  26.       control: 'object'
  27.       description: '历史记录列表'
  28.       type: { required: true, summary: 'array' }, 
  29.     }, 
  30.   }, 
  31. }; 
  32.  
  33. const Template = (args, { argTypes }) => ({ 
  34.   components: { STrackingHistory }, 
  35.   props: Object.keys(argTypes), 
  36.   template: ''
  37. }); 
  38.  
  39. export const Default = Template.bind({}); 
  40. (Default as any).args = { 
  41.   title: 'Order Tracking History'
  42.   list: [ 
  43.     { 
  44.       time'18:00:22'
  45.       date'2021-11-23'
  46.       status: 'string; // 选填,缺省时不显示'
  47.       statusType: 'default'
  48.       contents: [ 
  49.         { 
  50.           label: 'Message'
  51.           value: 'LineContent[]; // 选填,按顺序展示每一行内容'
  52.         }, 
  53.         { 
  54.           label: 'Oprater'
  55.           value: 'LineContent[]; // 选填,按顺序展示每一行内容'
  56.         }, 
  57.       ], 
  58.       splitLineText: 'New Order'
  59.     }, 
  60.     { 
  61.       date'2021-1-2'
  62.       status: 'string; // 选填,缺省时不显示'
  63.       statusType: 'default'
  64.       contents: [ 
  65.         { 
  66.           label: 'Operator'
  67.           value: 'LineContent[]; // 选填,按顺序展示每一行内容'
  68.         }, 
  69.       ], 
  70.     }, 
  71.     { 
  72.       date'2021-11-23'
  73.       status: 'string; // 选填,缺省时不显示'
  74.       contents: [ 
  75.         { 
  76.           value: 'LineContent[]; // 选填,按顺序展示每一行内容'
  77.         }, 
  78.       ], 
  79.     }, 
  80.     { 
  81.       date'2021-11-23'
  82.       status: 'string; // 选填,缺省时不显示'
  83.       statusType: 'success'
  84.       contents: [], 
  85.     }, 
  86.     { 
  87.       date'2021-1-23'
  88.       contents: [{}], 
  89.     }, 
  90.     { 
  91.       date'2021-1-3'
  92.     }, 
  93.     { 
  94.       date'2021-11-23'
  95.       contents: [ 
  96.         { 
  97.           label: 'Message'
  98.         }, 
  99.       ], 
  100.     }, 
  101.   ], 
  102. }; 

2. docz

Docz 是一个高效、零配置的事件记录工具。

Docz 基于 MDX ,有许多内置的组件可以帮助你记录你的事情。

它同时支持添加插件,以便于通过 Docz 流程和数据管控很多事情。

代码示例

  1. // Button.mdx 
  2. import { Playground } from 'docz' 
  3. import { Button } from './Button' 
  4.  
  5. # Button 
  6.  
  7. ## Basic usage 
  8.  
  9.  
  10.    
  11.   "secondary">Click me 
  12.  

渲染示例

这是官网的一个示例,可以看出代码的示例需要写在 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 中加入:

  1. "resolutions": { 
  2.   "@types/react""^16.9.23" 

即可。

2.文档引用问题

由于 dumi 的文档是面向用户的,因此写文档时引入组件的方法,举例:

如 Button 组件为:

  1. import { EditArea } from 'react-pro-components' 

由于这里引入的是 node_module 的包,这使得组件库的更改无法映射到文档中,需要添加别名映射。

在 .umirc.ts 中添加:

  1. const path = require('path'); 
  2. const chainWebpack = require('webpack-chain'); 
  3. export default { 
  4.  // 其他配置 
  5.   chainWebpack(memo) { 
  6.     // 设置 alias 
  7.     memo.resolve 
  8.       .alias 
  9.       .set('react-pro-components', path.resolve(__dirname, 'src''components')) 
  10.   }, 
  11. }; 

3. 其他问题

dumi 是否支持 api 文档的部分属性隐藏呢?

暂不支持

dumi 是否支持搜索呢?

site 模式支持,doc 模式暂不支持。

dumi 是否 md 文档单独放在组件目录下的一个文件夹下呢?

暂不支持,需要直接放在组件目录下,如 Button 组件:

  1. ├── Button 
  2. │   └── index.md 

结论

经多对比之后, 我们把一个 React 组件库 迁移到了 dumi, 并取得了不错的效果。

有需要做 React 组件库的小伙伴可以留意下dumi.

至于 Vue 组件文档库, 大家就根据自己的情况灵活选择吧。

希望这篇文章能对大家有所帮助, 谢谢。

 

来源:前端皮小蛋内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯