pnpm 包管理工具

pnpm 的工作原理、依赖管理机制和性能优势

问题

pnpm 是什么?它与 npm/yarn 有什么区别?

解答

pnpm 是一个包管理器,与 npm/yarn 类似,但在安装速度和磁盘空间利用上有显著优势。

依赖结构:嵌套 + 扁平

打开通过 pnpm 安装的项目 node_modules 文件夹,你会发现只有 package.json 中声明的依赖(软链接),而真正的模块文件存储在 node_modules/.pnpm 中,以 模块名@版本号 的形式扁平化存储。

这种设计避免了跨声明访问的问题,因为项目的 node_modules 只能访问声明的依赖。

pnpm-lock.yaml 文件类似 yarn.lockpackage-lock.json,为项目提供稳定的依赖版本信息。

硬链接与文件复用

node_modules/.pnpm 中的文件实际上是 pnpm 缓存文件的硬链接,避免了多个项目存储相同文件造成的空间浪费。

pnpm 使用内容寻址的文件系统存储依赖。当两个版本的模块只有一个文件存在差异时,pnpm 只会新增这个差异文件,最大化提升存储效率。

关键点

  • 安装速度快,磁盘空间利用率高
  • 依赖结构采用软链接 + 扁平化存储,避免跨声明访问
  • 使用硬链接复用缓存文件,多项目共享依赖
  • 内容寻址文件系统,相同文件只存储一次
  • pnpm-lock.yaml 锁定依赖版本