【问题标题】:What truly happens when you try to npm install specific package?当您尝试 npm install 特定包时,真正发生了什么?
【发布时间】:2021-05-13 03:15:40
【问题描述】:

这是给出的:

  • 项目依赖项中的部分包位于私有注册表中。他们是完全独立的;
  • 上一次 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 但我也能够在最新版本上重现它

【问题讨论】:

    标签: node.js npm


    【解决方案1】:

    像往常一样,答案在文档中。根据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 的使用,预期树和实际树之间的唯一区别将是我们尝试安装的包。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      • 2017-05-22
      相关资源
      最近更新 更多