require.resolve 未解决依赖关系

Pla*_*256 6 node.js node-modules

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

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

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

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

bpe*_*dro 2

检查软件包是否已安装的一种方法是尝试安装require。请参阅下面的代码来验证是否未安装软件包。只需在注释now install themissing package之后添加安装它的代码即可。

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
}
Run Code Online (Sandbox Code Playgroud)

让我知道这个是否奏效。