检查一个node.js模块是否可用
我正在寻找一种方法来找出一个模块是否可用。
例如,我想检查模块mongodb
是否可用,以编程方式。
此外,它不应该停止程序,如果一个模块没有find,我想自己处理这个。
PS:我加了这个问题,因为Google没有帮助。
如果你只想检查一个模块是否可用(但是如果不是,则不加载),有一个更聪明的方法:
function moduleAvailable(name) { try { require.resolve(name); return true; } catch(e){} return false; } if (moduleAvailable('mongodb')) { // yeah we've got it! }
这是我find的最聪明的方法。 如果有人有更好的办法,请指出。
var mongodb; try { mongodb = require( 'mongodb' ); } catch( e ) { if ( e.code === 'MODULE_NOT_FOUND' ) { // The module hasn't been found } }
也许类似resolve
的模块在这里会有帮助吗?
模块的数量在npm上存在:
- asynchronous决心
- 解决
- resolveIt
- 增强型解决
- 定位
我首先写了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
模块path分辨率规则,但不会像node
那样阻塞主循环。 结果你得到的文件名,所以它可以用来决定其本地模块或全局和其他的东西。
ES6简单的解决scheme与1行代码:
const path = require('path'); const fs = require('fs'); function hasDependency(dep) { return module.paths.some(modulesPath => fs.existsSync(path.join(modulesPath, dep))); }
使用ES6箭头function
var modulePath = m => { try { return require.resolve(m) } catch(e) { return false } }
- 节点模块来处理可选的参数
- 我如何确定为什么我得到我的node.js服务器上的503错误?
- 服务器端未定义的renderProps / React / React-Router + Node / Express.js的同构渲染
- 这个NodeJS API是否正确完成? – Chatfuel不会按照预期parsing它
- 使用本地存储连接器时,StrongLoop中的ng-lb命令失败
- node.js模块安装发布Microsoft.Cpp.x 64.Targets(146,5):错误MSB6006:“CL.exe
- 为什么我的启动variables在循环运行之前被更改?
- 混合反应与快递?
- 用Frisby.js进行rest apitesting