package-lock.json 中的 "requires: true" 有啥作用

Posted

技术标签:

【中文标题】package-lock.json 中的 "requires: true" 有啥作用【英文标题】:What does "requires: true" do in package-lock.jsonpackage-lock.json 中的 "requires: true" 有什么作用 【发布时间】:2017-12-20 10:01:52 【问题描述】:

我们的团队刚刚更新到 npm@5。 package-lock.json 在 Windows 和 Mac 之间统一(某些依赖项是可选的,因此它们不会安装在 Windows 上,但它们会安装在 Mac 上),因此无论机器如何,我们都会生成相同的 node_modules 结构。一切顺利,然后每个团队成员都经历了以下步骤:

    rm -rf node_modules git pull npm install

这实际上对所有团队成员都很完美,除了一个在npm install 之后修改了package-lock.json 的成员。修改后的一行是它删除了"requires": true

所以我看到了:


  ...
  "version": "0.0.1",
  "lockfileVersion": 1,
  "requires": true,
  "dependencies": 
  ...

但他看到了:


  ...
  "version": "0.0.1",
  "lockfileVersion": 1,
  "dependencies": 
  ...

有人知道为什么requires: true 可能会从某些机器上的package-lock.json 文件中删除,而在其他机器上则不会?此外,稍微解释一下这个属性的作用也不会受到伤害。 :)

提前致谢!

【问题讨论】:

我也有同样的问题。我正在使用node 8.1.2npm 5.0.4。查看他们的文档,没有提到任何requires。我也很好奇它的作用。请注意,删除它似乎并没有真正破坏任何东西(适用于我们的 CI 和登台服务器) 更新:好像和npm版本有关。刚刚更新为npm 5.1.0requires: true 消失了。但是,我所有的依赖项现在都有一个 requires 键。我认为requires: true 强制package-lock.json 以嵌套方式列出依赖项的依赖项。 请参阅 github.com/npm/npm/pull/19307 以获得将说明从规范文件移至帮助页面的 PR 【参考方案1】:

正如我在 cmets 中所怀疑的那样,requires 字段自 5.1.0 以来已添加。您可以在此处查看相关的拉取请求 https://github.com/npm/npm/pull/17508(更改日志可在此处查看 https://github.com/npm/npm/releases/tag/v5.1.0)

引用它所说的话:

这有一些修复:

    它引入了一个新的 package-lock.json 字段,称为 requires,它 跟踪给定模块需要哪些模块。 .....

为避免此类冲突,我建议您(以及我自己)确保您的所有队友都使用相同的npm 版本。

更新

npm 升级到版本5.1.0 后,我遇到了缺少依赖项的问题(在Angular 4 应用程序上工作)。如果有人遇到同样的问题,这是我为解决它所做的:

rm -rf node_modules
npm prune
npm install

希望对你有帮助。

【讨论】:

接受作为答案,因为我们确实需要使用相同的 NPM 版本。我们还发现,将所有依赖项列为 devDependencies 是有问题的,因为 NPM 在解析 devDependencies 的依赖项时存在问题。最后,可选模块将安装在某些机器上,但不会安装在其他机器上。一旦我们使用了相同版本的 NPM 并修复了依赖关系,我们现在按照以下步骤更新模块:rm -rf node_modules && npm install --no-optional

以上是关于package-lock.json 中的 "requires: true" 有啥作用的主要内容,如果未能解决你的问题,请参考以下文章

package-lock.json 中的 `"dev" true` 是做啥用的?

我应该将 `package-lock.json` 复制到 Dockerfile 中的容器映像吗?

package-lock.json 中的 "requires: true" 有啥作用

package.json中的版本和package-lock.json的作用

如何在没有任何副作用的情况下更新 package-lock.json 中的单个依赖项?

text package-lock.json包含不存在于package.json中的不同且有问题的npm包