搭建前端组件库文档最佳姿势:Docz

简介: 搭建前端组件库文档最快姿势:Docz

文章首发公众号“混沌前端”

Docz 是零配置的,基于Gatsby + MDX,如果你们部门没有使用文档工具,那么你可以轻松接入,如果已经使用了文档工具不妨了解一下Docz,做个对比。

为什么要为项目组件/组件库添加文档

组件库文档可以帮我们解决以下问题:

  1. 不知道项目中有哪些公共组件(比如组员写的组件,但是你并不知道),导致重复开发。
  2. 复用组件时需要再去翻代码,看看怎么使用,传什么参数。
  3. 以前写的代码,需要修改或者重构时,无从下手

有了组件库文档,基本就可以解决上面的问题,同时也提升了代码复用率和开发效率。

前置概念

常见的文档工具

  1. vuePress
  2. gitbook
  3. MDX  MarkDown + JSX
    支持导入React组件 JSON数据  MD或MDX文档
    支持remark 生态系统中的任何插件
    Playground 实时修改,实时预览
  4. Gatsby
    生态丰富,有各种各样的插件,支持MDX。
  5. JSDoc
    根据javascript文件中注释信息,生成JavaScript应用程序或库、模块的API文档 的工具
    参考文档:jsdoc-to-markdown
  6. TSDoc
    参考文档:https://tsdoc.org/play
  7. React Styleguidist  基于JSDOC 可以帮助react项目快速构建项目文档
  8. StoryBook
    一个强大的集组件开发,查看,测试的文档工具,支持多种框架。使用”组件驱动开发“理念。支持多种框架 React Vue Angular Ember Preact Svelte等
    参考文档:CDD
  9. docsify特点:
  • 简单轻便
  • 没有静态构建的 html 文件
  • 多个主题
  1. Dumi
  • 开箱即用
  • 为组件开发而生,支持Markdown扩展,可以渲染组件
  • 主题系统,支持自定义渲染样式
  • API自动生成,基于TypeScript类型定义自动生成组件API
  1. Docz
  2. bisheng Ant Design组件库文档就是使用bisheng构建的

为什么推荐使用Docz

  • 基于MDX进行了封装
  • 完全使用Gatsby构建,可以使用Gatsby的插件和工具生态
  • 零配置
  • 支持TypeScript、CSS预处理器
  • 内置Playground组件,编辑组件可以进行实时渲染
  • 内置Props组件,注释直接生成文档

我们来看一下Docz常用的两个内置组件吧。

Playground

你可能看过AntDesign组件库文档,代码演示 模块中提供了跳转到CodeSandBoxCodePen等网站查看和编辑示例代码的功能。详细内容可以翻阅这篇文章:Antd中示例代码是怎么直接在CodeSandBox中打开的

但是在Docz中你可以直接进行编辑并可以实时查看预览效果。

Props

只需使用Props组件,即可将参数类型和文档注释生成文档,通过表格进行展示

import { Playground, Props } from 'docz'

import { Button } from './'

# Button

<Propsof={Button}/>

## Basic usage

<Playground>

 <Button>Click me</Button>

 <Buttonkind="secondary">Click me</Button>

</Playground>

importReactfrom'react'

importtfrom'prop-types'

constButton= ({ children, kind }) => {

 // We use the kind prop to determine the button's class

 return<buttonclassName={kind}>{children}</button>

}

Button.propTypes= {

 /**

  * This is a pretty good description for this prop.

  */

 kind: t.oneOf(['primary', 'secondary', 'cancel', 'dark', 'gray']),

}

Button.defaultProps= {

 kind: 'primary',

}

exportButton

安装、配置和构建

安装

npm install docz # react react-dom

运行

"scripts": {

   "docz:dev": "docz dev",

   "docz:build": "docz build",

   "docz:serve": "docz build && docz serve"

}

开发

创建.mdx文件即可(指定name和route)。

构建

npm run build # 生成静态资源在.docz/dist目录中

npm run build ----dest docs-site-directory  # 通过--dest 指定文档生成目录

也可以在配置中指定打包输出目录

// doczrc.js

exportdefault {

 dest: '/some-folder'

}

部署

构建之后可以使用任何静态站点托管服务进行部署。

MDX支持

可以直接引入.jsx/.tsx组件,样式;

内置组件

  • Playground
    Playground支持编辑实时渲染,支持函数组件和State
  • Props
    组件内的prop-types定义和typeScript的Interface会通过<Props>转换成表格展示

文档设置

使用YMAL自定义文档设置(也可以自定义属性,用于自定义theme)

---

name: My Document

route: /custom-route

menu: Documents

hidden: false

---

CSS预处理器

需要Gatsby提供的能力,安装插件

TypeScript支持

// doczrc.js

exportdefault {

 typescript: true

}

如果需要精确控制组件后缀,可以使用filterComponents and docgenConfig进行过滤

支持自定义主题

项目配置

基本配置

base 页面访问的basePath

src 指定组件存放目录

files 指定docz解析文件查找路径规则  默认会查找所有扩展名为.mdx的文件

ignore 需要忽略解析的文件

dest 指定docz build的目录

title  Header展示title,默认会去package.json中name字段

description HTML中meta字段

typescript typescript支持 默认false .mdx文件中需要引入TypeScript组件则需要设置

propsParser props格式化 供<Props />渲染使用,禁用可以提升性能。

config 指定docz配置文件 默认顺序 docz.json | .doczrc | doczrc.json |doczrc.js | docz.config.js | docz.config.json

public 指定公共目录,绝对资源路径会从这个目录下取数据

editBranch 点击 Github 按钮时用于编辑文档的分支

host devServer地址 默认 '127.0.0.1'

port devServer 端口

构建流程

menu 可指定菜单中文档的顺序

plugins 指定要使用的插件数组

组件和HooksAPI

ComponentsProvider 将组件传递给 MDX,它们将在您将 Markdown 转换为 html 时使用

Playground 渲染组件并在其中显示代码的可编辑版本

Props 获取组件并根据组件中属性定义生成属性表的组件

useComponents 配合ComponentsProvider使用

useDocs 获取所有已解析文档的列表, 当要创建菜单或列表之类的内容时会很有用。

useMenus 返回 Docz 构建的菜单

useConfig 获取项目配置中项目配置对象

支持自定义插件和MDX插件

使用注意:每次涉及到路由的变化都需要重启生效,遇到缓存问题可以删除.docz文件夹后重启

// 一个简单的docz配置 doczrc.js

exportdefault {

 files: './docs/mdx/*.{md,markdown,mdx}',

 dest: './docs/site',

 title: 'Flex-Ctrip-Offline',

 typescript: true

}

使用Gatsby生态

你可以直接在Docz中使用丰富的Gatsby插件,只需在根目录创建gatsby-config.js文件即可。

比如,你想在Docz页面中引入script脚本,可以使用gatsby-plugin-load-script插件:

module.exports= {

   plugins: [

     {

       resolve: 'gatsby-plugin-load-script',

       options: {

         disable: false,

         src: '//www.example.com/demo.js',

         crossorigin: 'anonymous',

         onLoad: '() => console.log("add ubt script!")',

       }

     },

     {

       resolve: 'gatsby-plugin-load-script',

       options: {

         disable: false,

         src: '//www.example.com/demo.js',

         crossorigin: 'anonymous',

         onLoad: '() => console.log("add shark script!")',

       }

     }

   ],

 }

如果你想自定义webpack打包配置,可以新建gatsby-node.js:

// 此文件是用于docz自定义webpack配置。是Gatsby提供的功能:https://www.gatsbyjs.com/docs/how-to/custom-configuration/add-custom-webpack-config/

constpath=require('path')

exports.onCreateWebpackConfig= ({

 stage,

 rules,

 loaders,

 plugins,

 actions,

}) => {

 actions.setWebpackConfig({

   resolve: {

       alias: {

           '@components': path.resolve(__dirname, '../src/components'),

           '@styles': path.resolve(__dirname, '../src/styles'),

           '@models': path.resolve(__dirname, '../src/models'),

           '@utils': path.resolve(__dirname, '../src/utils')

       }

   }

 })

}


相关文章
|
25天前
|
数据采集 前端开发 JavaScript
《花100块做个摸鱼小网站! 》第四篇—前端应用搭建和完成第一个热搜组件
本文档详细介绍了从零开始搭建一个包含前后端交互的热搜展示项目的全过程。通过本教程,读者不仅能学习到完整的项目开发流程,还能掌握爬虫技术和前后端交互的具体实践。适合有一定编程基础并对项目实战感兴趣的开发者参考。
59 1
|
22天前
|
JavaScript 前端开发 开发者
哇塞!Vue.js 与 Web Components 携手,掀起前端组件复用风暴,震撼你的开发世界!
【8月更文挑战第30天】这段内容介绍了Vue.js和Web Components在前端开发中的优势及二者结合的可能性。Vue.js提供高效简洁的组件化开发,单个组件包含模板、脚本和样式,方便构建复杂用户界面。Web Components作为新兴技术标准,利用自定义元素、Shadow DOM等技术创建封装性强的自定义HTML元素,实现跨框架复用。结合二者,不仅增强了Web Components的逻辑和交互功能,还实现了Vue.js组件在不同框架中的复用,提高了开发效率和可维护性。未来前端开发中,这种结合将大有可为。
65 0
|
7天前
|
SpringCloudAlibaba JavaScript 前端开发
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
分布式组件、nacos注册配置中心、openfegin远程调用、网关gateway、ES6脚本语言规范、vue、elementUI
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
|
20天前
|
Android开发 iOS开发 C#
Xamarin:用C#打造跨平台移动应用的终极利器——从零开始构建你的第一个iOS与Android通用App,体验前所未有的高效与便捷开发之旅
【8月更文挑战第31天】Xamarin 是一个强大的框架,允许开发者使用单一的 C# 代码库构建高性能的原生移动应用,支持 iOS、Android 和 Windows 平台。作为微软的一部分,Xamarin 充分利用了 .NET 框架的强大功能,提供了丰富的 API 和工具集,简化了跨平台移动应用开发。本文通过一个简单的示例应用介绍了如何使用 Xamarin.Forms 快速创建跨平台应用,包括设置开发环境、定义用户界面和实现按钮点击事件处理逻辑。这个示例展示了 Xamarin.Forms 的基本功能,帮助开发者提高开发效率并实现一致的用户体验。
46 0
|
20天前
|
前端开发 UED 开发者
React组件优化全攻略:深度解析让你的前端应用飞速运行的秘诀——从PureComponent到React.memo的彻底性能比较
【8月更文挑战第31天】在构建现代Web应用时,性能是提升用户体验的关键因素。React作为主流前端库,其组件优化尤为重要。本文深入探讨了React组件优化策略,包括使用`PureComponent`、`React.memo`及避免不必要的渲染等方法,帮助开发者显著提升应用性能。通过实践案例对比优化前后效果,不仅提高了页面渲染速度,还增强了用户体验。优化React组件是每个开发者必须关注的重点。
35 0
|
22天前
|
JavaScript 前端开发
揭秘Vue.js组件魔法:如何轻松驾驭前端代码,让维护变得轻而易举?
【8月更文挑战第30天】本文探讨了如何利用Vue.js的组件化开发提升前端代码的可维护性。组件化开发将复杂页面拆分为独立、可复用的组件,提高开发效率和代码可维护性。Vue.js支持全局及局部组件注册,并提供了多种组件间通信方式如props、事件等。通过示例展示了组件定义、数据传递及复用组合的方法,强调了组件化开发在实际项目中的重要性。
13 0
|
1月前
|
资源调度 JavaScript 前端开发
Vue3+TypeScript前端项目新纪元:揭秘高效事件总线Mitt,轻松驾驭组件间通信的艺术!
【8月更文挑战第3天】Vue3结合TypeScript强化了类型安全与组件化开发。面对大型应用中复杂的组件通信挑战,可通过引入轻量级事件发射器Mitt实现事件总线模式。Mitt易于集成,通过简单几步即可完成安装与配置:安装Mitt、创建事件总线实例、并在组件中使用`emit`与`on`方法发送及监听事件。此外,利用TypeScript的强大类型系统确保事件处理器正确无误。这种方式有助于保持代码整洁、解耦组件,同时提高应用的可维护性和扩展性。不过,在大规模项目中需谨慎使用,以防事件流过于复杂难以管理。
61 1
|
30天前
|
前端开发 JavaScript 机器人
中后台前端开发问题之动态标注组件渲染到界面上如何解决
中后台前端开发问题之动态标注组件渲染到界面上如何解决
25 0
|
2月前
|
数据可视化 前端开发 JavaScript
前端框架与库-D3.js数据可视化基础
【7月更文挑战第21天】D3.js是Web开发中创建动态、交互图表的利器,适用于从基础条形图到复杂地理热力图的广泛需求。核心概念涉及数据绑定至DOM,支持动态更新。初学者常遇难题包括不当数据绑定、选择器误用、过渡动画过量及坐标轴配置失误。避免策略需善用`.data()`, `.enter().append()`, `.exit().remove()`管理数据,熟知选择器差异,适度应用`.transition()`, 并精准设定坐标轴。示例条形图代码展示了数据绑定至`&lt;rect&gt;`元素的过程,奠定基础,助你进阶复杂项目。
81 4
|
1月前
|
Web App开发 前端开发 JavaScript
React——前端开发中模块与组件【四】
React——前端开发中模块与组件【四】
27 0