工具
代码能够组件化,文档也可以,今天要介绍的是 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 ,真的很强大。