假如有三个模块:A,B,C。A requires B at v1.0,然后C也需要B,但是版本时v2.0.如下图
npm3试图减轻这种嵌套导致的深层关系和冗余。npm3尝试通过扁平的方式安装一些第二依赖(依赖的依赖),在相同的目录作为主要需要的依赖。
下面是主要不同的关键:
- 在目录结构里不再预测类型(primary,secondary等等)依赖
- 依赖解决方案取决于安装顺序,或者安装的顺序会改变
node_modules
目录树结构
例子 - Github上的
假如有一个模块,A需要B
现在,我们创建一个应用需要模块A
在
npm install
,npm v3会安装模块A和它的依赖module B,扁平的/node_modules
目录在npm v2里是一种嵌套的方式:
然后,我们需要另一个模块C,C需要B,但是是另一个版本。
但是,B v1.0已经是顶级依赖,我们不能再将B v2.0作为顶级依赖。npm v3会默认的使用npm v2d的方式,将新的使用嵌套方式,模块B依赖会在需要它的模块之下,这个例子里,在模块C下:
在终端里,看起来是这样的:
使用
npm ls
可以列出依赖和他们的关系:如果只想查看主要的依赖,使用:
npm ls --depth=0