首页 > 解决方案 > 当您尝试 npm install 特定包时,真正发生了什么?

问题描述

这是给出的:

现在,当我运行npm install <package-name>(包已经在 package.json 和 package-lock.json 中列出的包)时,npm 尝试恢复锁定文件中列出的所有包,偶然发现私有包,并且由于授权错误而无法安装一个特定包与它无关。使用--no-shrinkwrap选项或填充 node_modules 一切都按预期工作。我首先认为它与审计有关,但 --no-audit 选项并没有改变任何东西。

我的问题是,为什么 npm 在没有明显(至少对我而言)原因的情况下会表现得这样?

npm 版本:6.9.0 但我也能够在最新版本上重现它

标签: node.jsnpm

解决方案


像往常一样,答案在文档中。根据https://docs.npmjs.com/cli/v6/commands/npm-install#algorithm npm 需要package.json,添加请求的依赖项,然后尝试恢复与现有 node_modules 树相比缺少的所有内容。

文档的另一部分说如果package-lock.json存在 npm install 默认使用它。所以在结果中,我们得到一个空的 node_modules,因此不存在树,但 package-lock 声称应该有包,我们最终恢复了所有依赖树。

如果我们省略使用package-lock.json预期树和实际树之间的唯一区别将是我们试图安装的包。


推荐阅读