3

我有一个tmp包含 3 个测试 node.js 模块的目录[mod0.js, mod1.js, mod2.js]

我正在尝试编写一个函数,以便将这三个模块导入一个数组,然后返回所述数组。我可以放到 REPL 并可以使用var x = require("./tmp/mod0");etc 导入每个文件而没有任何问题。

当我尝试运行以下函数以自动执行此操作时,我收到错误消息[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 中手动而不是自动化时它会起作用。

4

1 回答 1

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";

所以现在我的返回列表有一个数组。还; 确保您的目录具有读取权限(我确定它确实如此)

于 2012-06-22T02:19:56.140 回答