Skip to content

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中的逻辑可能会有点不同

软链接和硬链接

  1. 软链接可以理解为指向源文件的指针,它是单独的一个文件,仅仅只有几个字节,它拥有独立的inode

  2. 硬链接与源文件指向一个物理地址,它与源文件同享存储数据,它俩拥有相同的inode

pnpm为何节省空间

解决了npm/yarn平铺node_modules带来的依赖项重复的问题

软链接的作用场景:同一个项目同一个版本的包不需要重复安装。

硬链接作用的场景:多个项目,npm包类似,也不用多次安装。

pnpm安装速度快的原因:

  • 硬链接
  • 依赖重复,不用重复安装