fs 如何读取 js 模块的注释
需求
想解析一份 js 文件,把 require 的 js 对象打印出来。但是发现并不能获取到注释信息,毕竟是注释 = =
源码
main.js
let fs = require('fs');
const PATH = './input'; // 目录
// 遍历目录得到文件信息
function walk (path, callback) {
let files = fs.readdirSync(path);
files.forEach(function (file) {
if (fs.statSync(path + '/' + file).isFile()) {
callback(path + '/' + file);
}
});
}
// 运行
walk(PATH, (file) => {
let map = require(file);
let keys = Object.keys(map);
keys.forEach((key) => {
fs.writeFileSync('./output/output.txt', JSON.stringify(map[key], null, '\t'));
});
});
input/test.js
module.exports = {
'/api/massEmail/pcGame/getInfo': {// 获取邮件详情
Type: 'GET', // 请求类型
Request: {
Id: 1 // 邮件 Id
},
Response: {
Data: {
Id: 1, // Id
Name: 'Roam' // Name
},
Status: true, // 状态
Message: 'Success' // 返回信息
}
}
};
最终生成:
- output/output.text
{
"Type": "GET",
"Request": {
"Id": 1
},
"Response": {
"Data": {
"Id": 1,
"Name": "Roam"
},
"Status": true,
"Message": "Success"
}
}
求助
不知道各位有什么思路没,如果读取文件,涉及的正则之类的解析是否会很繁杂,或者有更好的方法?
9 回复
ps:再次编辑,这个编辑框有 bug,滚动的时候跳来跳去,
可以试试用 jsdoc 或 jscodeshift 的 API
jscodeshift 是 FB 家的,它是对 recast 的 wrapper,而 recast 是 esprima 的 wrapper
另外,你是想自动生成 API 的 meta 吧? 看下 http://swagger.io/
你需要JS解析器才能做这事。例如esprima
jsdoc,gulp-dox
我只是想写一份 js 模拟数据,然后解析生成两份文件:
- 一份用来 mock,这个简单,因为不用注释,直接打印对象就行了
- 另一份用来给后端,这个需要一些文字说明,打算注释方式,然而就是如何获取注释,并和相应地方做匹配了
swagger 公司有的部门在用,然而编辑不方便,没有敲一份 js 简单
esprima 正在看,发现对象的 Attach comments 不能很好对应,感觉需要逐行输出的感觉了。谢谢大家帮助,我再看看文档。