尝试自动导入node.js模块时找不到模块

时间:2012-06-22 01:54:57

标签: node.js file-io

我有一个目录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中手动执行但不是自动化的。

1 个答案:

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

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