npm V3版本之前
问题1
会将模块对应的依赖装到当前模块下,那么如果有嵌套的话,依赖树就会比较深.这中长路径会导致在windows下是找不到的.有一句玩笑话是宇宙最深的不是黑洞而是nodemodules.
问题2
相同的包如果被不同的包依赖就会下载多个副本,造成磁盘空间的浪费
npm V3版本(和yarn的处理一致)
采用了扁平依赖关系树来解决这个问题,目录层级就变成了这样:
问题1
在包中可以访问到他们并不依赖的包,这是拉平之后的副作用,可能会有安全问题.
问题2
拉平算法非常复杂,当我们npm i的时候明显感觉很慢,就是因为这个算法的问题
问题3
有些包是必须出现在被依赖包的nodemodule中的,也就是说不能拉平,一旦被拉平就会出现bug
pnpm解决
作者是一个乌克兰人,90年的,还挺帅
隔离解决
通过上图我们可以看到foo是可以访问bar的,但是bar不能访问foo
拉平算法优化
可以通过npmi去感受它的速度被提高了,这归功于拉平算法的优化.而且它也不是严格的拉平
保留nodemodules不会产生bug
它是通过各种链接来建立这个依赖树