【问题标题】:How does NPM handle version conflicts?NPM 如何处理版本冲突?
【发布时间】:2017-06-28 02:02:27
【问题描述】:

由于 NPM 版本 3 节点模块和依赖项都安装在同一根级别。但是,如果我安装了两个依赖于同一模块的两个不同版本的模块怎么办?比如我安装asyncnpm i async@2.1.4,whichrequires lodash version 4.14.0,那么我安装yeomannpm i yo@1.8.5,whichrequires lodash version version 3.2.0,npm如何解决这个冲突?

【问题讨论】:

  • "在这种情况下,在同一个依赖项上具有冲突版本的每个依赖项都将获得该冲突依赖项的自己的嵌套副本。这就是为什么我们将安装树描述为最大平坦 - 它仍然允许在冲突的情况下嵌套。”取自本主题中的一个 github 问题。

标签: node.js npm npm-install node-modules


【解决方案1】:

所有依赖项和内部依赖项都试图在node_modules 的根目录中找到一个位置,除非与相同的依赖项发生冲突,但版本不同。 当发生冲突时,它会在所需的每个依赖项下创建一个子 node_modules,并将冲突的内部库推送到其中。

示例: 这里,“A”在内部依赖于“alpha@v1.0”,“B”依赖于“alpha@v2.0”。 当您执行如下所示的安装 A 和 B 时:

npm install A
npm install B

node_modules
|_ A
|_ alpha @v1.0
|_ B
|    |_ node_modules
|        |_ alpha @v2.0
|_ ...

注意:另一个 node_modules 在主 node_module 内的“B”下创建。

更多详情:visit this post

【讨论】:

  • 我的理解是否正确,如果(继续您的示例)在前面提到的两个安装(“A”和“B”)之后,一个是npm install C,其中“C”取决于“alpha@v2.0”,那么会有两个“alpha@v2.0”副本(一个在node_modules/B/node_modules/下,另一个在“node_modules/C/node_modules/”下)?
  • 如果项目还有 100 个依赖于“alpha@v2.0”的依赖项,那么我们的项目树中是否会有 102 个“alpha@v2.0”代码副本?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
  • 2011-06-26
  • 2023-03-23
  • 2019-08-07
相关资源
最近更新 更多