工具
代码能够组件化,文档也可以,今天要介绍的是 remark,功能强大到你想不到。
The world’s most popular Markdown pars**er! ** 一点也不夸张,掌握了它,你可以为所欲为。
需求
最近在做 G2Plot V2(简称 G) 和 Ant Design Charts (简称 A,G2Plot React 版本),1.0 文档已经被诟病很久了,2.0 我们决定在文档上下手,尽扯淡,进入正题,大家都知道,每个图表都有很多通用属性,例如 width 、height 等等,如果给每个图表都CV一遍,成本也是很高的毕竟好几十个图表,而且不方便维护,作为前端开发,最先想到的当然是组件化了。
组件化
提取公用文档到指定目录,每个图表通过特殊标识引入即可,公用文件里面可以继续引入公用文件,层级不限。这不是就是个正则替换吗?当然,如果你正则足够牛逼,你也可以为所欲为。
源文件
为了方便演示,所有文件放统一scripts目录下。
#test.md
## 配置属性### 图表容器`markdown:./common-a.md`
common-a.md
#### width<description>**可选** _number_</description>功能描述:设置图表宽度。默认配置:`400`#### height<description>**可选** _number_</description>功能描述:设置图表高度。默认配置:`400``markdown:./common-b.md`
common-b.md
#### nice<description>**可选** _boolean_</description>功能描述:是否美化。默认配置:`true`#### min<description>**可选** _number_</description>功能描述:坐标轴最小值。默认配置:`无`
代码实现
执行入口,unified.js
const fs = require('fs');const path = require('path');const remark = require('remark');const { mdprima } = require('./mdprima.js');// 文件路径,上层自动扫描const filePath = path.resolve(__dirname, './test.md');const res = remark().use(mdprima).processSync(fs.readFileSync(filePath));fs.writeFileSync(path.resolve(__dirname, './API.zh.md'), res.contents);
核心文件 mdprima.js
const path = require('path');const fs = require('fs');const remark = require('remark');// js 示例转 React 语法,Ant Design Charts 层使用// const parseFile = require('./parse-v2.js');const mdprima = () => {return function transformer(tree) {recursionTree(tree);};function recursionTree(tree) {// 删除顶部导航if (tree.type === 'thematicBreak') {tree.type = 'html';}// 解析套娃路径if (tree.type === 'inlineCode' && tree.value.indexOf('markdown:') !== -1) {const filePath = tree.value.split(':')[1];const docsPath = path.resolve(__dirname, filePath);const processor = remark().use(mdprima).processSync(fs.readFileSync(docsPath));tree.type = 'html';tree.value = processor.contents;}if (tree.children && tree.children.length) {tree.children.forEach((children) => {recursionTree(children);});}}};module.exports = { mdprima };
终端执行 node scripts/unified.js 即可生成生成 scripts/API-zh.md 文件
#API-zh.md
## 配置属性### 图表容器#### width<description>**可选** _number_</description>功能描述:设置图表宽度。默认配置:`400`#### height<description>**可选** _number_</description>功能描述:设置图表高度。默认配置:`400`#### nice<description>**可选** _boolean_</description>功能描述:是否美化。默认配置:`true`#### min<description>**可选** _number_</description>功能描述:坐标轴最小值。默认配置:`无`
总结
出于演示,只给了最简单的代码示例,真正用到项目中时,有很多问题需要去解决的,这些是正则难以处理的,大家有时间可以多研究哈 remark ,真的很强大。
