pnpm的优势
pnpm
对比npm/yarn
的优点:
- 更快的下载依赖
- 更高效的利用磁盘空间
- 更优秀的依赖管理
- 对monorepo支持更好
pnpm
下载速度更快的原因:
- 使用硬链接
- 相同的依赖不需要重复安装
解决了npm和yarn的2个痛点:
依赖重复。解决了npm/yarn平铺node_modules带来的依赖重复问题。具体说就是,A包中依赖lodash@4.0,B中也依赖了lodash@4.0,那么这个lodash包就会被安装两次,一是时间浪费,下载的时候需要更多的时间,二是空间浪费,整个node_modules会更大。其实一些比较常见的包,在一个项目里被下载很多次是非常常见的,比如刚才说的lodash、postcss。
幽灵依赖,npm和yarn采用平铺的方式,就会package.json没有这个依赖包,也可以直接引用。如果之后这个包不再依赖了,就会出现报错。
pnpm
缺点:
如果使用的某个包出问题,直接改源码好像不行吧,比较新的版本7.4左右的版本新增pnpm patch
命令,不过我也还没用过这个命令;如果项目删除了,有一些依赖安装在全局目录中的,有个命令pnpm store prune
;软硬链接在windows和mac中的逻辑可能会有点不同
软链接和硬链接
软链接
可以理解为指向源文件的指针,它是单独的一个文件,仅仅只有几个字节,它拥有独立的inode
。硬链接
与源文件指向一个物理地址,它与源文件同享存储数据,它俩拥有相同的inode
。
pnpm为何节省空间
解决了npm/yarn平铺node_modules带来的依赖项重复的问题
软链接的作用场景:同一个项目同一个版本的包不需要重复安装。
硬链接作用的场景:多个项目,npm包类似,也不用多次安装。
pnpm安装速度快的原因:
- 硬链接
- 依赖重复,不用重复安装