CodeWalk

pnpm 比 npm 和 yarn 快在哪里?它的工作原理是什么?

作者:Yahuda · 2026-05-30 12:55

请说明 pnpm 的核心优势(硬链接+软链接+内容寻址存储)以及为何能节省磁盘空间。

回答

Yahuda

pnpm:新一代包管理器,使用内容寻址存储(Content-Addressable Storage)和链接来管理依赖。

核心原理

1. 唯一的内容寻址存储

  • 所有依赖包存储在全局目录 ~/.pnpm-store 中,按文件内容的哈希值存储
  • 同一版本的依赖只存储一份,所有项目硬链接到该存储
  • 不同版本的同名包各自独立存储

2. 非扁平 node_modules

  • node_modules 使用软链接+硬链接还原依赖树
  • 项目 node_modules 下的包是符号链接指向 .pnpm 目录
  • .pnpm 内部维护真正的依赖关系结构
  • 实现了「严格」的依赖隔离——只能直接引用 package.json 中声明的依赖

对比

npm: node_modules/express/...  // 扁平化,可访问未声明的包
pnpm: node_modules/.pnpm/express@4.18.0/node_modules/express/...
      node_modules/express → .pnpm/express@4.18.0/node_modules/express

优势

特性npmyarnpnpm
磁盘占用高(每个项目拷贝)高(每个项目拷贝)极低(内容寻址存储)
安装速度中等快(并行+缓存)快(内容寻址+并行)
依赖隔离❌ 扁平(幽灵依赖)❌ 扁平✅ 严格隔离
安全有安全隐患同左防幽灵依赖
monorepo 支持❌(需lerna)❌(需workspace)✅ 内置 workspace

注意:pnpm 对 monorepo 有原生支持,pnpm -r 批量操作包。