如果模块存在且是否存在要加载,如何检入节点?

时间:2014-02-12 21:41:06

标签: node.js express

我需要检查文件/(自定义)模块js是否存在于某个路径下。我试过像

var m = require('/home/test_node_project/per');
但是当路径中没有per.js时会抛出错误。 我想要检查一下  fs如果文件存在但我不想添加'.js'作为后缀,如果没有它可以检查。 如果模块存在且是否存在要加载,如何检入节点?

4 个答案:

答案 0 :(得分:65)

Require是一个同步操作,因此您可以将其包装在try / catch中。

try {
    var m = require('/home/test_node_project/per');
    // do stuff
} catch (ex) {
    handleErr(ex);
}

答案 1 :(得分:37)

您可以尝试加载它,然后捕获它无法加载时生成的异常:

try {
    var foo = require("foo");
}
catch (e) {
    if (e instanceof Error && e.code === "MODULE_NOT_FOUND")
        console.log("Can't load foo!");
    else
        throw e;
}

你应该检查你得到的异常,以防万一它不仅仅是一个加载问题而且还有其他问题。避免误报和所有这些。

答案 2 :(得分:5)

您可以使用以下方法检查文件夹是否存在:

var fs = require('fs');

if (fs.existsSync(path)) {
    // Do something
}

// Or

fs.exists(path, function(exists) {
    if (exists) {
        // Do something
    }
});

答案 3 :(得分:5)

可以检查模块是否存在,而无需实际加载:

function moduleIsAvailable (path) {
    try {
        require.resolve(path);
        return true;
    } catch (e) {
        return false;
    }
}

文档:

  

require.resolve(request[, options])

     

使用内部的require()机制来查找模块的位置,而不是加载模块,只需返回已解析的文件名。

注意:像这样的运行时检查适用于Node应用程序,但是它们不适用于browserify,WebPack和React Native等捆绑包。