我正在寻找一种方法来确定module是否可用。
例如,我想以mongodb编程方式检查module是否可用。
此外,如果找不到module,它不应该停止程序,我想自己处理这个问题。
PS:我添加了这个问题,因为谷歌没有帮助。
我正在寻找一种方法来确定module是否可用。
例如,我想以mongodb编程方式检查module是否可用。
此外,如果找不到module,它不应该停止程序,我想自己处理这个问题。
PS:我添加了这个问题,因为谷歌没有帮助。
如果您只想检查module是否可用(但如果不可用则不加载它),还有一种更聪明的方法:
function moduleAvailable(name) {
try {
require.resolve(name);
return true;
} catch(e){}
return false;
}
if (moduleAvailable('mongodb')) {
// yeah we've got it!
}
这是我发现的最聪明的方法。如果有人有更好的方法,请指出。
var mongodb;
try {
mongodb = require( 'mongodb' );
}
catch( e ) {
if ( e.code === 'MODULE_NOT_FOUND' ) {
// The module hasn't been found
}
}
也许resolve-like module在这里会有所帮助?
npm 上存在的module数量:
我先写了,async-resolve例如:
var Resolver = require('async-resolve');
var resolver_obj = new Resolver();
resolver_obj.resolve('module', __dirname, function(err, filename) {
return console.log(filename);
});
它使用nodemodule路径解析规则,但不像它那样阻塞主循环node。结果你得到文件名,所以它可以用来决定它的本地module或全局和其他东西。
ES6 简单的解决方案,只有 1 行代码:
const path = require('path');
const fs = require('fs');
function hasDependency(dep) {
return module.paths.some(modulesPath => fs.existsSync(path.join(modulesPath, dep)));
}
使用 ES6 箭头函数
var modulePath = m => { try { return require.resolve(m) } catch(e) { return false } }