fs 如何读取 js 模块的注释
发布于 6 年前 作者 Pulsating 5229 次浏览 来自 问答

需求

想解析一份 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 不能很好对应,感觉需要逐行输出的感觉了。谢谢大家帮助,我再看看文档。

回到顶部