使用dumi生成react组件库文档并发布到github pages
周末两天玩了下号称西湖区东半球最牛逼的react文档站点生成工具dumi,顺带结合github pages生成了react-uni-comps文档站, 一套弄下来,感觉真香,现在还只是浅尝,高级的特性还没玩完,文档还需继续打磨完整,不知道是不是东半球最牛逼,西湖全区应该无与伦比了 ,下面是当前文档站移动端和pc端预览截图(整套弄下来花了半天时间!)
桌面端效果(手机界面模拟/桌面端效果/自动根据ts生成的API表格文档)
手机效果(支持light/dark主题)
文档站点制作步骤如下:
- 安装 dumi 和移动端主题 dumi-theme-mobile
yarn add -D dumi dumi-theme-mobile
- 添加配置文件.umirc.ts,下面是我的配置
import { defineConfig } from 'dumi';
const repo = 'react-uni-comps';
const logo =
'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii0xMS41IC0xMC4yMzE3NCAyMyAyMC40NjM0OCI+CiAgPHRpdGxlPlJlYWN0IExvZ288L3RpdGxlPgogIDxjaXJjbGUgY3g9IjAiIGN5PSIwIiByPSIyLjA1IiBmaWxsPSIjNjFkYWZiIi8+CiAgPGcgc3Ryb2tlPSIjNjFkYWZiIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiPgogICAgPGVsbGlwc2Ugcng9IjExIiByeT0iNC4yIi8+CiAgICA8ZWxsaXBzZSByeD0iMTEiIHJ5PSI0LjIiIHRyYW5zZm9ybT0icm90YXRlKDYwKSIvPgogICAgPGVsbGlwc2Ugcng9IjExIiByeT0iNC4yIiB0cmFuc2Zvcm09InJvdGF0ZSgxMjApIi8+CiAgPC9nPgo8L3N2Zz4K';
export default defineConfig({
title: repo,
favicon: logo,
logo: logo,
outputPath: 'docs',
mode: 'doc',
resolve: {
// 配置 dumi 嗅探的文档目录
includes: ['mdx'],
},
hash: true,
// 使用 webpack 5进行构建。
webpack5: {},
// 通过 [webpack-chain](https://github.com/mozilla-neutrino/webpack-chain) 的 API 修改 webpack 配置。
chainWebpack(memo, { env, webpack, createCSSRule }) {
memo.cache = {
type: 'filesystem',
name: 'dumi',
buildDependencies: {
config: [__filename],
},
store: 'pack',
};
memo.plugins.delete('friendly-error');
memo.plugins.delete('copy');
},
// github page
base: `/${repo}/`,
publicPath: `/${repo}/`,
// 自定义样式
styles: [
`
#root .__dumi-default-menu-header p {
display:none;
}
#root .__dumi-default-menu-header h1 {
font-size: 24px;
margin: 16px auto;
}
`,
],
themeConfig: {
carrier: '中国移动',
hd: {
// 禁用高清方案
rules: [],
// 更多 rule 配置访问 https://github.com/umijs/dumi/blob/master/packages/theme-mobile/src/typings/config.d.ts#L7
},
},
});
- 编写组件文档,以/mdx/Button.md举例子, 我把文档放在了mdx目录,因为github pages需要使用docs目录
---
title: 按钮
order: 0
mobile: true
group:
title: 基础组件
order: 0
path: base
---
<code src="../demo/Button.jsx"></code>
<API src="../src/Button.tsx"></API>
- 因为组件比较多,我这里markdown文档通过ejs动态生成,当组件api/demo更新时,可以自动更新文档,无需手工维护
// 数据配置
module.exports = [
{
title: '基础组件',
path: 'base',
comps: [
{
name: 'Button',
title: '按钮',
},
{
name: 'Icon',
title: '图标',
},
],
........
},
];
// 文档生成
/* eslint-disable @typescript-eslint/no-var-requires */
const ejs = require('ejs');
const data = require('./doc-data');
const path = require('path');
const fs = require('fs');
const tpl = `---
title: <%= title %>
order: <%= order %>
mobile: <%= mobile %>
group:
title: <%= groupTitle %>
order: <%= groupOrder %>
path: <%= groupPath %>
---
<code src="../demo/<%= name %>.jsx"></code>
<API src="../src/<%= name %>.tsx"></API>
`;
data.map((group, idx) => {
group.comps.map((item, subIdx) => {
item.order = subIdx;
item.groupOrder = idx;
item.groupPath = group.path;
item.groupTitle = group.title;
item.mobile = typeof item.mobile === 'boolean' ? item.mobile : true;
const fileName = path.resolve(__dirname, `./mdx/${item.name}.md`);
if (fs.existsSync(fileName)) {
fs.unlinkSync(fileName);
}
fs.writeFileSync(path.resolve(__dirname, `./mdx/${item.name}.md`), ejs.render(tpl, item));
});
});
- 开发构建
开发命令: dumi dev
开发命令: dumi build
- 配置github pages
点击项目settings->左边的Pages一栏, 设置Source, 我这里选择master分支, /docs目录托管构建的文档站,点击save保存, 然后打开上面他告之的github pages链接即可预览
使用dumi生成react组件库文档并发布到github pages的更多相关文章
- Web 前端 UI 组件库文档自动化方案 All In One
Web 前端 UI 组件库文档自动化方案 All In One 需求 自动化 动态 好用 markdown element-ui 中示例和说明按照一定规则写在md文件中,调用md-loader将md文 ...
- Vitepress搭建组件库文档(上)—— 基本配置
在 vite 出现以前,vuepress 是搭建组件库文档不错的工具,支持以 Markdown 方式编写文档.伴随着 vite 的发展,vitepress 已经到了 1.0.0-alpha.22 版本 ...
- 使用VitePress搭建及部署vue组件库文档
每个组件库都有它们自己的文档.所以当我们开发完成我们自己的组件库必须也需要一个组件库文档.如果你还不了解如何搭建自己的组件库可以看这里->从零搭建Vue3组件库.看完这篇文章你就会发现原来搭建和 ...
- Vitepress搭建组件库文档(下)—— 组件 Demo
上文 <Vitepress搭建组件库文档(上)-- 基本配置>已经讨论了 vitepress 搭建组件库文档的基本配置,包括站点 Logo.名称.首页 home 布局.顶部导航.左侧导航等 ...
- vuepress搭建UI组件库文档踩坑篇
为了实现组件效果预览及代码展示可折叠功能,使用了插件vuepress-plugin-demo-container 相关配置可参考官网说明文档 第一步 安装插件 npm i - D vuepress-p ...
- 从0开始用webpack开发antd,react组件库npm包并发布
一.初始化一个npm包 1.新建一个文件夹(名称随意,建议和报名一致),输入命令 :npm init -y 会自动生成一个包的说明文件 package.json如下(本文以scroll-antd-ta ...
- 如何快速构建React组件库
前言 俗话说:"麻雀虽小,五脏俱全",搭建一个组件库,知之非难,行之不易,涉及到的技术方方面面,犹如海面风平浪静,实则暗礁险滩,处处惊险- 目前团队内已经有较为成熟的 Vue 技术 ...
- React 组件库框架搭建
前言 公司业务积累了一定程度,需要搭建自己的组件库,有了组件库,整个团队开发效率会提高恨多. 做组件库需要提供开发调试环境,和组件文档的展示,调研了几个比较主流的方案,如下: docz 配置简单,功能 ...
- 解析Markdown文件生成React组件文档
前言 最近做的项目使用了微前端框架single-spa. 对于这类微前端框架而言,通常有个utility应用,也就是公共应用,里面是各个子应用之间可以共用的一些公共组件或者方法. 对于一个团队而言,项 ...
随机推荐
- 洛谷 P6075 [JSOI2015]子集选取
链接:P6075 前言: 虽然其他大佬们的走分界线的方法比我巧妙多了,但还是提供一种思路. 题意: %&¥--@#直接看题面理解罢. 分析过程: 看到这样的题面我脑里第一反应就是DP,但是看到 ...
- VCS常用仿真选项开关及步骤总结
转自:https://blog.csdn.net/bcs_01/article/details/79803304 转自:https://blog.csdn.net/wonder_coole/artic ...
- 集合栈 牛客网 程序员面试金典 C++ Python
集合栈 牛客网 程序员面试金典 C++ Python 题目描述 请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈.该数据结构应支持与普通 ...
- 修改 oracle 数据库的 sys 账号密码,ERROR at line 1: ORA-01034: ORACLE not available
挺久没有登录的 oracle 数据库,因为公司要求加固密码,登录后修改失败 1.启动数据库的同时启动控制文件.数据文件,提示:cannot mount database in EXCLUSIVE mo ...
- linux系列之: 你知道查看文件空间的两种方法吗?
目录 简介 du命令 df命令 总结 简介 linux系统中查看文件空间大小应该是一个非常常见的命令了,今天给大家介绍linux系统中查看文件空间的两种方法和在使用中可能会遇到的奇怪问题. 为什么会有 ...
- Linux&c 文件操作,线程进程控制,网络编程,简单知识点梳理
一:文件操作 在linux下,一切皆文件,目录是文件,称为目录文件,内容是该目录的目录项(但是目录只有内核可以编辑,超级用户也不可以编辑),设备也是设备文件,在/dev存放的就是一些设备文件,linu ...
- APP自动化环境搭建之appium工具介绍(二)
1.下载解压android-sdk-windows-appium //配置环境: ANDROID_HOME:D:\android-sdk-windows-appium path:...;%ANDROI ...
- 官宣 .NET RC 2
我们很高兴发布 .NET 6 RC(Release Candidate) 2.它是生产环境中支持的两个"go live"候选版本中的第二个. 在过去的几个月里,团队一直专注于质量的 ...
- PTA 7-2 畅通工程之局部最小花费问题 (35分)
PTA 7-2 畅通工程之局部最小花费问题 (35分) 某地区经过对城镇交通状况的调查,得到现有城镇间快速道路的统计数据,并提出"畅通工程"的目标:使整个地区任何两个城镇间都可以实 ...
- Unity——技能系统(二)
Unity技能系统(二) Unity技能系统(一) Demo展示: 五.技能管理和释放 1.CharacterSkillSystem 技能系统类,给外部(技能按钮,按键)提供技能释放方法: 技能释放逻 ...