前端组件库文档解决方案

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 本篇主要分享什么内容: 常用的文档/静态站点生成工具有哪些 每个工具有什么特点 工具适应场景 希望可以帮助到你

本篇主要分享什么内容:

  • 常用的文档/静态站点生成工具有哪些
  • 每个工具有什么特点
  • 工具适应场景

前置概念

组件库文档工具选型

AndD组件库文档是怎么制做的,使用了什么工具。

以AntD Button组件为例,我们看一下antd组件库的文档页面结构构成和文档生成:

Button文档

Button文档仓库源文件

网站文档仓库源文件

按钮类型

bisheng

AntD使用了bisheng来生成组件库文档,把MarkDown进行拼接和渲染成最终的文档展示页面。

静态站生成工具方案

  1. vuePress
  2. gitbook
  3. MDX
    MarkDown + JSX
    支持导入React组件
    支持remark 生态系统中的任何插件
    Playground 实时修改,实时预览
    基础
    支持MarkDown语法
    完全支持JSX 以<字符开头的行都视为JSX代码块
    支持import 和 exports
    import 组件  json数据  md或mdx文档
    MDXProvider
    提供MarkDown渲染HTML使用组件的映射 组件列表
  4. GatsbyDemo
  1. 初始化

npm init gatsby

npm install -g gatsby-cli

gatsby new

  1. 运行

npm run develop

  1. 特点:生态好,功能丰富,有各种各样的插件,支持MDX。
    Gatsby 有一个强大的功能,称为数据层,使用 Gatsby 的数据层,您可以组合来自多个来源的数据,这让您可以为每种类型的数据选择最佳平台。
    网络异常,图片无法展示
    |

    http://localhost:8000/___graphql 中可以看到GraphQL数据
  2. 数据来源Gatsby-source-*
    数据拉入:页面数据拉入  使用页面查询,页面中导出 query,通过graphql查询即可

       组件中拉入数据  可以使用useStaticQuery钩子拉入,

  1. 动态创建页面
    Gatsby的 文件系统路由 API定义用于命名src/pages目录中文件的特殊语法,它允许您根据数据层中的节点集合为站点动态创建新页面。
  1. JSDoc
    根据javascript文件中注释信息,生成JavaScript应用程序或库、模块的API文档 的工具
    安装

npm install -D jsdoc

  1. 使用

jsdoc  xxx.js

  1. 默认会输出文档到out文件夹,可以通过--destination指定输出路径
    jsdoc-to-markdown
  2. TSDoc
    https://tsdoc.org/play
  3. React Styleguidist

  4. StoryBook

一个强大的集组件开发,查看,测试的文档工具,支持多种框架。使用”组件驱动开发“理念。

- 支持多种框架 React Vue Angular Ember Preact Svelte等

  1. Tutorials
    CDD
  2. docsify特点:
  • 简单轻便
  • 没有静态构建的 html 文件
  • 多个主题
  1. 安装

npm i docsify-cli -g

  1. 初始化

docsify init ./docs

  1. 预览

docsify serve docs

  1. 目录结构
    index.html 文件入口
    README.md 主页
    .nojekyll 防止GitHub Pages忽略以下划线开头的文件
    侧边栏
    创建 _sidebar.md(支持目录层级嵌套)。
    _sidebar.md中页面会自动生成标题和子标题
    自定义导航栏
  • html标签
  • _navbar.md(同样支持目录层级嵌套,展示形式为弹窗)
  1. 封面
    _coverpage.md #/ 首页全屏展示
    可以指定背景图和背景色
    可以指定只展示封面
    配置
    window.$docsify = {

el:'#app', // 根元素

repo:'docsifyjs/docsify/', //Git仓库地址

maxLevel: 6,  // 目录最大层级

loadNavbar: false, // 加载_navbar.md作为导航栏(或者直接指定md路径)

loadSidebar: false, // 加载_sidebar.md作为侧边栏

hideSidebar: true, // 隐藏侧边栏

subMaxLevel: 0, // 在自定义侧边栏中添加目录(最大层级)

auto2top: true, // 页面路径改变时滚动到屏幕顶部

homepage: 'README.md', // `#/` 主页

basePath: '/path/', // 基本路径, 可以将其设置为其他目录或其他域名

relativePath: false, // 如果为 true,则链接是相对于当前上下文的。

coverpage: false, // 封面 默认加载_coverpage.md,也可以指定md路径

logo,

name,

nameLink,

markdown, // 自定义渲染MarkDown为HTML [文档](https://docsify.js.org/#/markdown)

themeColor,

executeScript: true,

mergeNavbar: true, // 小屏幕上的导航栏将与侧边栏合并

externalLinkTarget: '_self', // default: '_blank' 打开默认连接方式

routerMode: 'history', // default: 'hash' 路由模式

onlyCover: false, // `#/`只展示封面

requestHeaders: {    'x-token': 'xxx',  }, // 设置请求资源头

notFoundPage: true, // 加载_404.md 或指定相应的md

vueComponents, // 注册vue组件, 可在md中直接使用

vueGlobalOptions,

vueMounts

  1. }
    主题  官方和社区制作的主题
    插件  全文检索,谷歌分析,表情符号,第三方脚本支持,图片缩放,在github上编辑,jsfiddler Demo预览,复制到剪切板,Gitalk,  分页和标签
    PWA
    SSR
    嵌入文件:支持视频, 音频,iframe或代码块,甚至MarkDown
  2. Docz
  • 基于MDX进行了封装
  • 完全使用Gatsby构建,可以使用Gatsby的插件和工具生态
  • 零配置
  • TypeScript支持
  1. 安装

npm install docz # react react-dom

  1. 运行

"scripts": {

   "docz:dev": "docz dev",

   "docz:build": "docz build",

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

}

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

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

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

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

// doczrc.js

export default {

 dest: '/some-folder'

}

  1. 部署
    构建之后可以使用任何静态站点托管服务进行部署。
    MDX支持
    可以直接引入.jsx/.tsx组件,样式;
    内置组件
  • Playground
    Playground支持编辑实时渲染,支持函数组件和State
  • Props
    组件内的prop-types定义和typeScript的Interface会通过<Props>转换成表格展示
  1. 文档设置
    使用YMAL自定义文档设置(也可以自定义属性,用于自定义theme)

---

name: My Document

route: /custom-route

menu: Documents

hidden: false

---

  1. CSS预处理器
    需要Gatsby提供的能力,安装插件
    TypeScript支持

// doczrc.js

export default {

 typescript: true

}

  1. 如果需要精确控制组件后缀,可以使用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

export default {

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

 dest: './docs/site',

 title: 'Flex-Ctrip-Offline',

 typescript: true

}

  1. Dumi
  • 开箱即用
  • 为组件开发而生,支持Markdown扩展,可以渲染组件
  • 主题系统,支持自定义渲染样式
  • API自动生成,基于TypeScript类型定义自动生成组件API
  1. 组件开发脚手架

npx @umijs/create-dumi-lib   # 初始化一个文档模式的组件库开发脚手架

npx @umijs/create-dumi-lib --site # 初始化一个站点模式的组件库开发脚手架 (比文档模式多一个主页,主页使用docs/index.md)

# 也可手动切换文档模式 => 站点模式: 修改.umirc.ts,添加mode:'site'

  1. 静态站点脚手架

npx @umijs/create-dumi-app

  1. 运行

npm install

npm start

  1. 构建及部署

npm run build

  1. 目录结构

├── README.md

├── docs  # 组件库文档目录

│   ├── index.md # 组件库文档首页(不存在会使用README.md)

│   └── otherDir # 组件文档其他路由

│       ├── index.md

│       ├── sample.md

│       └── help.md

├── src   # 组件库源码目录(单纯文档站点可忽略)

│   ├── Foo

│   └── index.ts

├── .umirc.ts # dumi配置文件

└── .fatherrc.ts # father-build的配置文件用于组件库打包

  1. 代码块
    jsx和tsx的代码块会被dumi解析为React组件,并进行渲染。
    dumi引入组件原则:

像用户一样使用组件:直接引入组件库进行文档demo演示。不仅可以用来调试组件、编写文档,还能用来被用户直接拷贝到项目中使用。dumi会为我们自动创建组件库NPM包->组件库源代码的映射。

  1. 外部demo
    可以引入外部文件作为demo渲染,并可支持查看demo源代码

<codesrc="/path/to/complex-demo.tsx"></code>

  1. 直接嵌入渲染

```jsx

/**

* inline: true

*/

import React from 'react';

export default () => '我会被直接嵌入';

```

  1. embed Markdow嵌套

<!-- 引入全量的 Markdown 文件内容 -->

<embedsrc="/path/to/some.md"></embed>

<!-- 根据行号引入指定行的 Markdown 文件内容 -->

<embedsrc="/path/to/some.md#L1"></embed>

<!-- 根据行号引入部分 Markdown 文件内容 -->

<embedsrc="/path/to/some.md#L1-L10"></embed>

<!-- 根据正则引入部分 Markdown 文件内容 -->

<embedsrc="/path/to/some.md#RE-/^[^\r\n]+/"></embed>

  1. 组件API自动生成
    JS Doc注释 + TypeScript类型定义的方式实现组件API自动生成
    如何在非-umi-项目中使用-dumi
    DEMO理念

目前我们选择的是使用Docz来做为业务组件库的文档生成工具,下一篇会讲一下我们为什么选择Docz,它有什么优点。

欢迎持续关注,微信公众号”混沌前端“

相关文章
|
3月前
|
数据采集 前端开发 JavaScript
《花100块做个摸鱼小网站! 》第四篇—前端应用搭建和完成第一个热搜组件
本文档详细介绍了从零开始搭建一个包含前后端交互的热搜展示项目的全过程。通过本教程,读者不仅能学习到完整的项目开发流程,还能掌握爬虫技术和前后端交互的具体实践。适合有一定编程基础并对项目实战感兴趣的开发者参考。
84 1
|
3月前
|
JavaScript 前端开发 开发者
哇塞!Vue.js 与 Web Components 携手,掀起前端组件复用风暴,震撼你的开发世界!
【8月更文挑战第30天】这段内容介绍了Vue.js和Web Components在前端开发中的优势及二者结合的可能性。Vue.js提供高效简洁的组件化开发,单个组件包含模板、脚本和样式,方便构建复杂用户界面。Web Components作为新兴技术标准,利用自定义元素、Shadow DOM等技术创建封装性强的自定义HTML元素,实现跨框架复用。结合二者,不仅增强了Web Components的逻辑和交互功能,还实现了Vue.js组件在不同框架中的复用,提高了开发效率和可维护性。未来前端开发中,这种结合将大有可为。
142 0
|
4天前
|
前端开发 JavaScript
除了 jsPDF,还有哪些前端库可以用于生成 PDF?
【10月更文挑战第21天】这些前端库都有各自的特点和优势,你可以根据具体的项目需求、技术栈以及对功能的要求来选择合适的库。不同的库在使用方法、性能表现以及功能支持上可能会有所差异,需要根据实际情况进行评估和选择。
|
3天前
|
前端开发 JavaScript 开发者
揭秘前端高手的秘密武器:深度解析递归组件与动态组件的奥妙,让你代码效率翻倍!
【10月更文挑战第23天】在Web开发中,组件化已成为主流。本文深入探讨了递归组件与动态组件的概念、应用及实现方式。递归组件通过在组件内部调用自身,适用于处理层级结构数据,如菜单和树形控件。动态组件则根据数据变化动态切换组件显示,适用于不同业务逻辑下的组件展示。通过示例,展示了这两种组件的实现方法及其在实际开发中的应用价值。
8 1
|
6天前
|
缓存 前端开发 JavaScript
前端serverless探索之组件单独部署时,利用rxjs实现业务状态与vue-react-angular等框架的响应式状态映射
本文深入探讨了如何将RxJS与Vue、React、Angular三大前端框架进行集成,通过抽象出辅助方法`useRx`和`pushPipe`,实现跨框架的状态管理。具体介绍了各框架的响应式机制,展示了如何将RxJS的Observable对象转化为框架的响应式数据,并通过示例代码演示了使用方法。此外,还讨论了全局状态源与WebComponent的部署优化,以及一些实践中的改进点。这些方法不仅简化了异步编程,还提升了代码的可读性和可维护性。
|
14天前
|
前端开发 JavaScript
乾坤qiankun(微前端)样式隔离解决方案--使用插件替换前缀
乾坤qiankun(微前端)样式隔离解决方案--使用插件替换前缀
121 8
|
14天前
|
存储 弹性计算 算法
前端大模型应用笔记(四):如何在资源受限例如1核和1G内存的端侧或ECS上运行一个合适的向量存储库及如何优化
本文探讨了在资源受限的嵌入式设备(如1核处理器和1GB内存)上实现高效向量存储和检索的方法,旨在支持端侧大模型应用。文章分析了Annoy、HNSWLib、NMSLib、FLANN、VP-Trees和Lshbox等向量存储库的特点与适用场景,推荐Annoy作为多数情况下的首选方案,并提出了数据预处理、索引优化、查询优化等策略以提升性能。通过这些方法,即使在资源受限的环境中也能实现高效的向量检索。
|
14天前
|
前端开发 JavaScript
CSS样式穿透技巧:利用scoped与deep实现前端组件样式隔离与穿透
CSS样式穿透技巧:利用scoped与deep实现前端组件样式隔离与穿透
89 1
|
14天前
|
存储 前端开发 JavaScript
🚀 10 个 GitHub 存储库,助你成为前端巨匠✨
本文介绍了10个极具价值的GitHub存储库,旨在帮助各级JavaScript开发人员提升技能。这些资源涵盖了从基本概念到高级算法、编码风格指南、面试准备等各个方面,包括经典书籍、实用工具和面试手册。无论您是刚入门的新手还是有经验的开发者,这些存储库都能为您提供丰富的学习资源,助您在JavaScript领域更进一步。探索这些资源,开启您的学习之旅吧!
44 0
🚀 10 个 GitHub 存储库,助你成为前端巨匠✨
|
17天前
|
前端开发 JavaScript 开发者
Web组件:一种新的前端开发范式
【10月更文挑战第9天】Web组件:一种新的前端开发范式
17 2