0x000 概述
本篇文章承接上文,记录的v2和v3版本在包管理方面的异同,基于阅读官方原文整理简化。
0x001 v2
管理方式
假设有模块A
、B
、C
,A
依赖B1.0
,C
依赖B2.0
,我们可以得出以下依赖图:
接着我们创建一个App
,同时依赖A
和C
,此时便会出现依赖地狱
npm
不使用单一的B
版本包,而是让不同的B
版本同时存在,只不过存在在各自的依赖包中,
看起来就像这样
0x002 v3管理方式
v3
和v2
对于依赖管理的方式不太一样,v3
希望让依赖扁平化。
假设我们有一个模块A
,A
依赖B
创建一个项目依赖A
此时执行npm install
,npm
将会同时安装模块A
、B
,并且扁平的放在项目的node_modules
文件夹下
此时我们再依赖一个模块C
,C
依赖B2.0
因为我们已经让B1.0
扁平化了,所以我们没有办法让B2.0
也扁平化,所以,这时候的B2.0
使用和v2
相同的处理方式。
此时的node_modules
文件夹如下所示
0x003 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
文件夹:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。