学习
实践
活动
专区
工具
TVP
写文章
专栏首页前端皮小蛋? 对比三个强大的组件文档展示工具

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

背景

前段时间, 部门在热火朝天的搞各类组件库

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

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

正文

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

  1. Story Book
  2. Docz
  3. Dumi

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

1. Story Book

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

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

代码示例

// 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 暴露可交互的属性。

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

渲染示例

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

import STrackingHistory from './tracking-history.vue';
import './style/index.less';

export default {
  title: 'Design System/展示/TrackingHistory',
  component: STrackingHistory,
  parameters: {
    docs: {
      description: {
        component: '订单历史追踪,主要按时间和状态维度跟进',
      },
    },
    design: {
      type: 'figma',
      url:
        'https://www.figma.com/file/zi4Lcb2H2K5JikFKeEvPD7/WMS%E5%85%B8%E5%9E%8B%E6%A8%A1%E6%9D%BFV1.1?node-id=2974%3A595',
    },
  },
  argTypes: {
    title: {
      control: 'text',
      description: '标题内容,必填',
      type: { required: true },
    },
    list: {
      control: 'object',
      description: '历史记录列表',
      type: { required: true, summary: 'array' },
    },
  },
};

const Template = (args, { argTypes }) => ({
  components: { STrackingHistory },
  props: Object.keys(argTypes),
  template: '<STrackingHistory v-bind="$props" />',
});

export const Default = Template.bind({});
(Default as any).args = {
  title: 'Order Tracking History',
  list: [
    {
      time: '18:00:22',
      date: '2021-11-23',
      status: 'string; // 选填,缺省时不显示',
      statusType: 'default',
      contents: [
        {
          label: 'Message',
          value: 'LineContent[]; // 选填,按顺序展示每一行内容',
        },
        {
          label: 'Oprater',
          value: 'LineContent[]; // 选填,按顺序展示每一行内容',
        },
      ],
      splitLineText: 'New Order',
    },
    {
      date: '2021-1-2',
      status: 'string; // 选填,缺省时不显示',
      statusType: 'default',
      contents: [
        {
          label: 'Operator',
          value: 'LineContent[]; // 选填,按顺序展示每一行内容',
        },
      ],
    },
    {
      date: '2021-11-23',
      status: 'string; // 选填,缺省时不显示',
      contents: [
        {
          value: 'LineContent[]; // 选填,按顺序展示每一行内容',
        },
      ],
    },
    {
      date: '2021-11-23',
      status: 'string; // 选填,缺省时不显示',
      statusType: 'success',
      contents: [],
    },
    {
      date: '2021-1-23',
      contents: [{}],
    },
    {
      date: '2021-1-3',
    },
    {
      date: '2021-11-23',
      contents: [
        {
          label: 'Message',
        },
      ],
    },
  ],
};

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、移动端组件库编写及多语言支持。

代码示例

在类型定义中:

渲染示例

总体对比

以下为三个库的特性对比:

docz

story book

dumi

支持编写的组件库类型

all ✅

all ✅

React Only

轻量级 / 开发者友好

文档内嵌在组件目录中

将引入模块写在代码示例中

自动生成组件库 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 文档的部分属性隐藏呢?

暂不支持

  1. dumi 是否支持搜索呢?

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

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

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

├── Button
│   └── index.md

结论

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

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

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

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

最后

如果觉得内容有帮助, 可以关注下我的公众号,掌握最新动态,一起学习!

相关链接

  1. https://zhuanlan.zhihu.com/p/110381664
  2. https://storybook.js.org/docs/react/get-started/browse-stories
  3. https://d.umijs.org/zh-CN
文章分享自微信公众号:
前端皮小蛋

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

作者:南山皮小蛋
原始发表时间:2021-04-29
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • 2018-11-28 Asciidoc 比Markdown更简洁强大的文档工具

    使用Asciidoc代替Markdown和Word撰写开发文档 https://my.oschina.net/gudaoxuri/blog/524132

    Albert陈凯
  • Posta:一款功能强大的跨文档信息安全搜索工具

    Posta是一款功能强大的跨文档信息安全搜索工具,广大研究人员可以使用Posta来研究跨文档的信息通信,它允许我们跟踪、探测和利用postMessage漏洞,而...

    FB客服
  • ApiPost强大好玩好用的接口与文档管理工具,中文哦

    ApiPost = 接口调试+接口文档快速生成+接口文档规范化管理+Mock API+接口流程测试。

    IT苦逼一枚
  • 扔掉Swagger,试试这款功能强大,零注解侵入的API接口文档生成工具!

    smart-doc是一款同时支持JAVA REST API和Apache Dubbo RPC接口文档生成的工具,smart-doc在业内率先提出基于JAVA泛型...

    乔戈里
  • 扔掉Swagger,试试这款功能强大,零注解侵入的API接口文档生成工具!

    smart-doc是一款同时支持JAVA REST API和Apache Dubbo RPC接口文档生成的工具,smart-doc在业内率先提出基于JAVA泛型...

    Java团长
  • 国产API管理平台横向比较,到底哪家强?

    随着现在前后端框架分离的流行,敏捷开发、版本迭代的更加频繁。API接口文档的管理越来越有必要,也越来越有意义。

    测试加
  • 这几款程序员常用代码对比工具,你用过几个?

    俗话说:三句不离本行,对于程序员这个可爱的群体来说也是一样,即使面对无休无止的编程工作,程序员们依旧任劳任怨的埋头苦干,梦想着用自己码下的代码改变世界。

    法医
  • vue开发工具有哪些,那个更合适?

    现在前端除了JavaScript外,还有react,vue,angular这三个框架在市场上用的比较多,可以说这三个框架很大程度上改变了前端的地位,相对于ang...

    北京锐智互动
  • 模态对话框-B 类产品设计细节:对话框 vs 抽屉

      说明:对话框和抽屉都是在当前页面之上覆盖出现的组件,让用户在不离开主路径的情况下,查看信息/提示/反馈,或快速执行某些的操作。两者的交互模式有类似之处,使用...

    囍楽云
  • Apipost :一款值得使用的利器

    Apipost 就把这三点集中于一身,低成本做长期主义的事情,小编就分着三个维度,给大家讲讲Apipost它和其他产品对比的一个优势。

    看、未来
  • Notion Like 笔记软件使用教程·学习资源汇总·知识管理方案:深度评测、辅助工具、信息管理、时间管理、任务管理、思维管理、项目管理、文件管理、笔记方法、

    关于 Notion 的使用教程,在 Notion 相关社区已经有不少精品内容。这篇文章中,无意于探讨过于高级的技术,而是为准备使用 Notion 以及 相关的 ...

    数字花园
  • 协同办公笔记软件综合评测:飞书、语雀、Notion、FlowUs、Wolai

    飞书文档汇集了文档、表格、思维笔记等在线创作工具,同时为文件提供安全、强大的云端存储和内容管理能力,文档所有者可以根据需要灵活设置浏览、编辑、评论、分享等权限,...

    数字花园
  • 在线协作产品哪家强?微软 Loop 、Notion、FlowUs

    微软 Loop 发布。这款借鉴 Loop 的新产品,与以往的 Notion、FlowUs等产品有什么区别呢?

    数字花园
  • 开源云原生平台对比 KubeSphere vs Rainbond

    最近因为工作需要,需要找一个功能完善的云原生应用平台,经过自己筛选和朋友推荐,剩下 KubeSphere和Rainbond ,这两个产品都是基于 Kuberne...

    Rainbond开源
  • 开源云原生平台 KubeSphere 与 Rainbond 对比

    最近因为工作需要,需要找一个功能完善的云原生应用平台,经过自己筛选和朋友推荐,剩下 KubeSphere 和 Rainbond,这两个产品都是基于 Kubern...

    我是阳明
  • 个人常用设计类网站汇总分享

    由于自己偶尔会写一些微信公众号的文章,同时在学习ps的过程中也遇到一些不错的网站。这里总结下来,希望对大家有帮助。推荐的只是网站,有大量优秀的客户端设计工具,后...

    卡二条

扫码关注腾讯云开发者

领取腾讯云代金券