我有一个目录tmp
,它有3个测试node.js模块[mod0.js, mod1.js, mod2.js]
。
我正在尝试编写一个函数,以便将这三个模块导入一个数组,然后返回所述数组。我可以放到REPL并使用var x = require("./tmp/mod0");
等导入每个文件,没有任何问题。
当我尝试运行以下功能以自动执行此操作时,收到错误[Error: Cannot fine module './tmp/mod0']
。
var _importFiles = function(path, files){
var moduleList = []
, trimmedName;
files.forEach(function (element, index, array){
if (_fs.lstatSync(path + "/" + element).isFile()){
trimmedName = element.substring(0, (element.length - 3));
moduleList.push(require("./" + path + "/" + trimmedName));
}
});
return moduleList;
};
我正在'tmp'
传递path
参数以及fs.readdirSync(path)
files
参数的输出。
如果我在process.cwd();
块中检查if
,它将与REPL控制台的匹配。
我试图弄清楚为什么它在REPL中手动执行但不是自动化的。
答案 0 :(得分:1)
我稍微修改了代码:
var _fs = require('fs');
var path = process.cwd() + '/tmp'
var _importFiles = function(path, files){
var moduleList = [], trimmedName;
files.forEach(function (element, index, array){
if (_fs.lstatSync(path + "/" + element).isFile()){
trimmedName = element.substring(0, (element.length - 3));
moduleList.push(require("./" + path + "/" + trimmedName));
}
});
return moduleList;
};
var imports = _importFiles('./tmp', _fs.readdirSync(path));
console.log(imports);
这给了我:
$ node import.js
[ 'imported mod0 automatically', 'imported mod1 automatically' ]
mod文件很简单module.exports = "imported mod(x) automatically";
所以现在我的返回列表有一个数组。也;确保您的目录具有读取权限(确保它具有读取权限)