NPM如何处理版本冲突?

jwe*_*rre 21 node.js npm node-modules npm-install

由于NPM版本3节点模块和依赖项都安装在同一根级别.但是,如果我安装两个依赖于同一模块的两个不同版本的模块呢?例如,如果我安装了async npm i async@2.1.4,这需要lodash版本4.14.0,那么我安装yeoman npm i yo@1.8.5,这需要lodash版本3.2.0,npm如何解决这个冲突?

Dmi*_*eev 13

Npm有一篇很棒的博客文章页面

https://docs.npmjs.com/how-npm-works/npm3
http://npm.github.io/how-npm-works-docs/npm3/how-npm3-works.html

  • 仅仅指向外部源的链接不是有效的答案,请参阅 https://stackoverflow.com/help/how-to-answer:“鼓励指向外部资源的链接,但请在链接周围添加上下文,以便您的其他用户了解它是什么以及为什么它在那里。始终引用重要链接中最相关的部分,以防目标网站无法访问或永久离线。” (5认同)

小智 11

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

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

npm install A
npm install B

node_modules
|_ A
|_ alpha @v1.0
|_ B
|    |_ node_modules
|        |_ alpha @v2.0
|_ ...
Run Code Online (Sandbox Code Playgroud)

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

有关更多详细信息:请访问此帖子

  • 我的理解是否正确,如果(继续您的示例)在前面提到的两个安装(“A”和“B”)之后执行“npm install C”,其中“C”取决于“alpha@v2.0” ”,那么会有两份“alpha@v2.0”(一份在node_modules/B/node_modules/下,另一份在“node_modules/C/node_modules/”下)? (3认同)
  • 如果项目还有 100 个依赖于“alpha@v2.0”的依赖项,那么我们的项目树中是否会有 102 个“alpha@v2.0”代码的副本? (2认同)