npm2的node_modules是嵌套的,存在问题:
1.嵌套层级太深
2.会有同样的依赖复制多次的问题
npm3+和yarn的node_modules是平铺的,扁平化的,依然存在问题:
1.存在幽灵依赖:明明没有声明在dependencies里的依赖,但在代码里却可以require进来
2.依赖包有多个版本的时候,只会提升一个,其余版本的包还是复制了很多次,依然有浪费磁盘空间的问题
pnpm
1.软连接和硬连接:硬连接就是同一个文件的不同引用,而软链接是新建一个文件,文件内容指向另一个文件。硬连接是有记录的,当文件没有被的引用的时候就可以删除
2.所有的依赖都是从全局store硬连接到了 node_modules/.pnpm 下,然后依赖之间通过软连接来相互依赖,只在全局store保存一份npm包的内容,其余的地方都link过去
3.项目中装了一个包,它的依赖会全部装到全局store,如果项目整个删除了,它的的依赖还是会存在全局store中
4.参考官网的图: