pnpm 为什么完爆npm和yarn? [PNPM]https://juejin.cn/post/7127295203177676837
公共依赖问题
npm2 会循环嵌套依赖
yarn、npm3 会把循环嵌套的依赖铺平
具体处理方式:
- 将第一个遇到的提升到顶层
- 版本冲突时,放在父依赖的顶层
- 遵循node的模块解析算法,从当前目录的
node_modules
逐级往上查找;
md
示例场景:
- 包A依赖 lodash@4
- 包B依赖 lodash@5
处理结果:
node_modules/
├── lodash@4(提升到顶层)
└── 包B/
└── node_modules/
└── lodash@5(嵌套安装)
有以下的问题:
幽灵依赖
, 项目代码可能意外访问到顶层;- 依赖树结构不稳定,依赖安装顺序的不同可能导致结构变化;
pnpm link:
将一个包链接到全局node_modules目录下,这样就可以在全局使用这个包了; 比如,如何将本地包链接到全局;
硬链接-软链接
pnpm是通过使用硬链接,实现多个文件夹共用同一个全局文件.pnpm/store
,从而大量减少磁盘消耗; 然后在node-modules下的.pnpm
,通过软链接连接到./pnpm/
,不允许使用未声明的依赖,从而避免幽灵依赖?
- tips: 注意区分全局下的
.pnpm
以及每个包自己的.pnpm
硬链接:文件的副本,占用磁盘空间 符号链接、软链接:快捷方式,不占用磁盘空间
在npm和/yarn中,每个项目独立复制依赖文件,占用空间大; 比较混乱,可能导致幽灵依赖和依赖冲突问题;