pnpm 包管理工具
pnpm 的工作原理、依赖管理机制和性能优势
问题
pnpm 是什么?它与 npm/yarn 有什么区别?
解答
pnpm 是一个包管理器,与 npm/yarn 类似,但在安装速度和磁盘空间利用上有显著优势。
依赖结构:嵌套 + 扁平
打开通过 pnpm 安装的项目 node_modules 文件夹,你会发现只有 package.json 中声明的依赖(软链接),而真正的模块文件存储在 node_modules/.pnpm 中,以 模块名@版本号 的形式扁平化存储。
这种设计避免了跨声明访问的问题,因为项目的 node_modules 只能访问声明的依赖。
pnpm-lock.yaml 文件类似 yarn.lock 和 package-lock.json,为项目提供稳定的依赖版本信息。
硬链接与文件复用
node_modules/.pnpm 中的文件实际上是 pnpm 缓存文件的硬链接,避免了多个项目存储相同文件造成的空间浪费。
pnpm 使用内容寻址的文件系统存储依赖。当两个版本的模块只有一个文件存在差异时,pnpm 只会新增这个差异文件,最大化提升存储效率。
关键点
- 安装速度快,磁盘空间利用率高
- 依赖结构采用软链接 + 扁平化存储,避免跨声明访问
- 使用硬链接复用缓存文件,多项目共享依赖
- 内容寻址文件系统,相同文件只存储一次
pnpm-lock.yaml锁定依赖版本
目录