本篇文章承接上文,记录的v2和v3版本在包管理方面的异同,基于阅读官方原文整理简化。node
v2
管理方式假设有模块A
、B
、C
,A
依赖B1.0
,C
依赖B2.0
,咱们能够得出如下依赖图:git
接着咱们建立一个App
,同时依赖A
和C
,此时便会出现依赖地狱github
npm
不使用单一的B
版本包,而是让不一样的B
版本同时存在,只不过存在在各自的依赖包中,npm
看起来就像这样segmentfault
v3
和v2
对于依赖管理的方式不太同样,v3
但愿让依赖扁平化。app
假设咱们有一个模块A
,A
依赖B
spa
建立一个项目依赖A
3d
此时执行npm install
,npm
将会同时安装模块A
、B
,而且扁平的放在项目的node_modules
文件夹下code
此时咱们再依赖一个模块C
,C
依赖B2.0
blog
由于咱们已经让B1.0
扁平化了,因此咱们没有办法让B2.0
也扁平化,因此,这时候的B2.0
使用和v2
相同的处理方式。
此时的node_modules
文件夹以下所示
v3
包的复制和取消复制假设咱们有一个项目
A1.0
B1.0
C1.0
依赖B2.0
添加依赖D
依赖B2.0
,此时:
添加依赖D
依赖B1.0
,此时
升级依赖A2.0
依赖B2.0
,此时
升级依赖E2.0
依赖B2.0
,此时
执行npm dedupe
查看node_modules
文件夹: