0x000 概述
本篇文章承接上文,记录的v2和v3版本在包管理方面的异同,基于阅读官方原文整理简化。
0x001 v2
管理方式
假设有模块A
、B
、C
,A
依赖B1.0
,C
依赖B2.0
,我们可以得出以下依赖图:@H_502_23@
接着我们创建一个App
,同时依赖A
和C
,此时便会出现依赖地狱@H_502_23@
npm
不使用单一的B
版本包,而是让不同的B
版本同时存在,只不过存在在各自的依赖包中,@H_502_23@
看起来就像这样
0x002 v3管理方式
v3
和v2
对于依赖管理的方式不太一样,v3
希望让依赖扁平化。
假设我们有一个模块A
,A
依赖B
@H_502_23@
创建一个项目依赖A
@H_502_23@
此时执行npm install
,npm
将会同时安装模块A
、B
,并且扁平的放在项目的node_modules
文件夹下@H_502_23@
此时我们再依赖一个模块C
,C
依赖B2.0
@H_502_23@
因为我们已经让B1.0
扁平化了,所以我们没有办法让B2.0
也扁平化,所以,这时候的B2.0
使用和v2
相同的处理方式。@H_502_23@
此时的node_modules
文件夹如下所示@H_502_23@
0x003 v3
包的复制和取消复制
假设我们有一个项目
A1.0
B1.0
C1.0
依赖B2.0
@H_502_23@
执行npm dedupe
@H_502_23@