我想知道require(pkgName)
是否会成功,也就是说,如果名称为pkgName
的包可用。我该如何最好地测试呢?
我知道我能做到
try {
require(pkgName)
} catch (err) {
available = false
}
但是这会导致加载错误,如果可能的话,我也想避免require
使用包。
答案 0 :(得分:3)
最好的方法是使用require.resolve()
,因为它实际上并不运行模块中包含的任何代码。
使用内部
require()
机制查找模块的位置,而不是加载模块,只需返回已解析的文件名。
就像require
一样,resolve
会在找不到模块时抛出,因此需要将其包含在try
/ catch
中。
答案 1 :(得分:1)
不要认为您可以使用require
,但您可以专门检查MODULE_NOT_FOUND
错误:
function moduleExists(mod) {
try {
require(mod);
} catch(e) {
if (e.code === 'MODULE_NOT_FOUND')
return false;
throw e;
};
return true;
}
答案 2 :(得分:0)
我正在使用“swig”模块。可能有更好的方法,但这对我有用。
var swig;
try {
swig = require('swig');
} catch (err) {
console.log(" [FAIL]\t Cannot load swig.\n\t Have you tried installing it? npm install swig");
}
if (swig != undefined) {
console.log(" [ OK ]\t Module: swig");
}