检查包装是否可用?

时间:2013-11-05 17:44:02

标签: node.js npm

我想知道require(pkgName)是否会成功,也就是说,如果名称为pkgName的包可用。我该如何最好地测试呢?

我知道我能做到

try {
  require(pkgName)
} catch (err) {
  available = false
}

但是这会导致加载错误,如果可能的话,我也想避免require使用包。

3 个答案:

答案 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");
}