node.js - 当您尝试 npm install 特定包时,真正发生了什么?
问题描述
这是给出的:
- 来自项目依赖项的部分包位于私有注册表中。他们是完全独立的;
- 从上一个 npm 安装留下的正确填充的 package-lock.json;
- 空 node_modules 文件夹;
现在,当我运行npm install <package-name>
(包已经在 package.json 和 package-lock.json 中列出的包)时,npm 尝试恢复锁定文件中列出的所有包,偶然发现私有包,并且由于授权错误而无法安装一个特定包与它无关。使用--no-shrinkwrap
选项或填充 node_modules 一切都按预期工作。我首先认为它与审计有关,但 --no-audit 选项并没有改变任何东西。
我的问题是,为什么 npm 在没有明显(至少对我而言)原因的情况下会表现得这样?
npm 版本:6.9.0 但我也能够在最新版本上重现它
解决方案
像往常一样,答案在文档中。根据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
预期树和实际树之间的唯一区别将是我们试图安装的包。
推荐阅读
- ruby-on-rails - 如何在 Rails + Devise + Oauth 中使用“以 {name} 身份继续”Facebook 按钮?
- javascript - 将输入值形成为 JSON
- javascript - 访问 JS 对象的“for var in”返回所有内容*但*拥有自己的属性?
- twitter-bootstrap - 如何删除带有图像的列中的左边距(Bootstrap 4)
- google-maps - 取消缩短到坐标的 goo.gl/maps 链接
- r - 如何使用 for 循环将列表中的子值相互比较?
- reactjs - 在反应中处理发布请求
- c# - 返回 json 的方法的签名是什么?
- excel - 为什么我会收到“类型不匹配”错误?
- mysql - 需要一些指导来优化 MySQL 中的报告