require.resolve不解析依赖

时间:2018-02-09 10:42:24

标签: node.js node-modules

我正在开发一个节点模块,我必须检查用户是否安装了特定的软件包(这是我必须遵循的逻辑),如果没有,请使用child_process.exec安装

出现问题的地方,即使我的脚本安装了包(node_modules包含它,也是package.json),如果我再次拨打require.resolve,它会说模块不存在。

对于我发现的(来自节点github问题),节点有一个"缓存",其中在第一次调用时,如果未安装包,则此包的缓存条目设置为一个随机值,它不是它的路径。然后,当您安装并尝试再次调用它时,它会调用该缓存条目。

是否有其他方法可以检查软件包是否已安装,或者我的本地节点安装是否已损坏?

2 个答案:

答案 0 :(得分:1)

检查软件包是否已安装的一种方法是尝试require它。请参阅下面的代码,验证是否未安装软件包。只需在注释现在安装缺少的包之后添加安装它的代码。

try {
  require('non-existent-package');
} catch (error) {
  // return early if the error is not what we're looking for
  if (error.code != 'MODULE_NOT_FOUND') {
    throw error;
  }
  // now install the missing package
}

让我知道这是否有效。

答案 1 :(得分:1)

查看node.js require() cache - possible to invalidate?

可以使用以下内容清理require缓存:

delete require.cache[require.resolve('./module.js')]