详情见:
https://www.yuque.com/docs/share/d64606fd-0e7b-4423-b200-93bdbbb1c4e9?# 《npm 如何处理依赖与依赖冲突》
图片懒得复制了
npm2是如何处理依赖的?
假设有三个模块:A、B、C。A依赖B@1.0,C依赖B@2.0。
现在,我们创建一个应用,它同时以来A、C。
依赖地狱
npm2会这么处理:
此时的目录结构是这样的:
此时执行npm ls查看包的依赖关系是这样的:
问题
这么做带来很多问题
- 依赖树的层级非常深。如果需要定位某依赖的依赖,很难找到该依赖的文件所在(例如,如果想定位模块 E,就不得不先知道他在依赖树中的位置);
- 不同的依赖树分支里,可能有大量实际上是同样版本的依赖(例如,A 目录下的 C 和 B 目录下面的 C 如果版本