检查node.js模块是否可用

时间:2012-07-22 13:30:24

标签: javascript node.js

我正在寻找一种方法来确定模块是否可用。

例如,我想以编程方式检查模块mongodb是否可用。

此外,如果找不到模块,它不应该暂停程序,我想自己处理。

PS:我添加了这个问题,因为Google没有帮助。

5 个答案:

答案 0 :(得分:21)

如果您只想检查一个模块是否可用(但如果不是,则加载它),有一种更聪明的方法:

function moduleAvailable(name) {
    try {
        require.resolve(name);
        return true;
    } catch(e){}
    return false;
}

if (moduleAvailable('mongodb')) {
    // yeah we've got it!
}

答案 1 :(得分:11)

这是我发现的最聪明的方法。如果有人有更好的方法,请指出。

var mongodb;
try {
    mongodb = require( 'mongodb' );
}
catch( e ) {
    if ( e.code === 'MODULE_NOT_FOUND' ) {
        // The module hasn't been found
    }
}

答案 2 :(得分:0)

也许resolve - 这样的模块会有用吗?

模块数量存在于npm:

我先写了async-resolve,例如:

var Resolver = require('async-resolve');
var resolver_obj = new Resolver();
resolver_obj.resolve('module', __dirname, function(err, filename) {
  return console.log(filename);
});

它使用node模块路径解析规则但不阻止主循环node这样做。结果你得到了文件名,所以它可以用来决定它的本地模块或全局和其他东西。

答案 3 :(得分:0)

ES6简单解决方案,包含1行代码:

const path = require('path');
const fs = require('fs');

function hasDependency(dep) {
        return module.paths.some(modulesPath => fs.existsSync(path.join(modulesPath, dep)));
}

答案 4 :(得分:-9)

使用ES6箭头功能

var modulePath = m => { try { return require.resolve(m) } catch(e) { return false } }
相关问题