这次自己来试试搭个玩玩。官网文档挺仔细的了,我们这就速度过一遍。
什么是 dumi?
dumi,中文发音嘟米,是一款为组件开发场景而生的文档工具,与 father 一起为开发者提供一站式的组件开发体验,father 负责构建,而 dumi 负责组件开发及组件文档生成。
特性
- 📦 开箱即用,将注意力集中在组件开发和文档编写上
- 📋 丰富的 Markdown 扩展,不止于渲染组件 demo
- 🏷 基于 TypeScript 类型定义,自动生成组件 API
- 🎨 主题轻松自定义,还可创建自己的 Markdown 组件
- 📱 支持移动端组件库研发,内置移动端高清渲染方案
- 📡 一行命令将组件资产数据化,与下游生产力工具串联
环境准备
node版本要求是10.13 或以上
脚手架的选择
有2种,一种是组件开发脚手架另一种是静态站点脚手架
组件开发脚手架
组件开发脚手架又分文档模式和站点模式
文档模式如下
站点模式如下
我们选择站点模式
1 2 3
| npx @umijs/create-dumi-lib --site or yarn create @umijs/dumi-lib --site
|
运行项目
进入.umirc.ts文件改一些配置,具体配置官网也很详细
1 2 3 4 5 6 7 8 9 10 11 12
| export default defineConfig({ mode: 'site', title: 'Pear的组件库', favicon: './images/logo.png', logo: './images/logo.png', publicPath: "./", history: { type: "hash" }, // outPath: 'docs-dist', // more config: https://d.umijs.org/config });
|
还有docs => index.md可以更改主页相关信息以及配置。
准备开发
先来看下目录结构
直接开始吧,随便写2个组件
dumi采用的是约定式路由,所以大多数情况下,我们不需要配置路由。
创建components文件夹放组件 => PText => index.tsx和index.md
需要在src => index.ts导出组件
1
| export { default as PText } from './components/PText';
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| index.tsx
import React, { useState, useEffect, useMemo, ReactNode } from 'react'; import "./index.less";
interface IProps { fs?: string | number; // font-size color?: string; className?: string; children?: ReactNode }
export const PText: React.FC<IProps> = (props) => { const { fs, color, className, children } = props;
return useMemo(() => { return ( <span style={{ fontSize: fs, color }} className={className}>{props.children}</span> ) }, []) }
export default PText;
PText.defaultProps = { fs: 16, }
|
index.md
关于md导航
1 2 3 4 5 6 7 8 9 10 11 12 13
| --- title: 自定义页面名称 nav: path: /自定义导航路由 title: 自定义导航名称 order: 控制导航顺序,数字越小越靠前,默认以路径长度和字典序排序 group: path: /自定义分组路由,注意,分组路由 = 导航路由 + 自己 title: 自定义分组名称 order: 控制分组顺序,数字越小越靠前,默认以路径长度和字典序排序 ---
<!-- 其他 Markdown 内容 -->
|
效果如下
然后自己可以写更多的组件或者其他.
打包
站点模式打包指令npm run docs:build,打包成dist上传至自己的gitee仓库,直接
最后访问线上的地址,效果如下。有了dumi我们不仅限于文档,可以在更多的场景下使用它.
- 在线预览
我的微信公众号: 梨的前端小屋