我一定错过了一些东西。我有一个 Mocha 测试文件,设置如下:
require('globals');
var library1 = require('library1'),
library2 = require('library2');
it('tests stuff', function() {
...
});
其中 globals
文件仅包含 before
和 afterEach
block ,以便它们适用于我的所有测试文件。
我想要做的是,在 before
和 afterEach
block 中,确定我在当前运行这些 block 的测试文件中 require
的哪些文件。因此,在我给出的示例测试文件中,我需要 afterEach
输出一个包含 globals
、library1
和 library2
的列表。
我尝试使用 Node.js 的 module.children
属性,但由于某种原因,它只返回我 globals
,并且不包括 library1
和 library2
。
编辑:我错过了什么,module.children
不会返回library1
和library2
?
最佳答案
这是一个将解析文件中的 require 的脚本示例。
var fs = require('fs');
function parseRequires(absPath){
var requiredFiles = [];
var contents = fs.readFileSync(absPath, 'utf8').split('\n');
contents.forEach(function(line){
var re = /(?:require\('?"?)(.*?)(?:'?"?\))/;
var matches = re.exec(line);
if(matches){
requiredFiles.push(matches[1]);
}
});
return requiredFiles;
}
module.exports = parseRequires;
我在同一目录中制作了一个测试脚本
var fs = require('fs');
var os = require('os');
function A(){}
var http = require("http");
var parseRequires = require("./parseRequires");
console.log( parseRequires( __dirname + '/testRequires.js') );
控制台结果:[ 'fs', 'os', 'http', './parseRequires' ]
这是一个解决方案,尽管我确信有一种更简单的方法可以使用 Nodejs 内置功能来做到这一点
关于javascript - Node.js 列出文件中所需的所有模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33875682/