为什么选它
随处可用
支持 Windows、Linux 与 macOS,从 CI 容器到 WSL 行为一致。
磁盘上只存一份
pnpm 使用内容寻址存储,把磁盘上所有模块目录的文件统一存放。依赖不同版本时,只有存在差异的文件会进入存储:一个 100 文件的包升级只改动 1 个文件,pnpm update 就只新增 1 个文件。
安装时,文件从存储的同一位置硬链接(或写时复制的引用链接)进入各项目的 node_modules,不占用额外空间。你省下的磁盘与项目数、依赖数成正比。
阅读完整动机依赖解析
识别全部所需依赖,并拉取到内容寻址存储。
结构计算
基于依赖声明计算非扁平的 node_modules 目录树。
硬链接装配
从存储把文件硬链接进各项目,缺失才回源。
快,是有据可查的
2×
快达 npm 与 Yarn classic 的两倍
上图是在依赖众多的 alotta-files 项目上的安装基准(越小越好):全新安装、缓存安装、 更新依赖等场景全面领先。数据来自官方 benchmark,Node.js v24.19.0,采集于 2026-09-04。
性能背后的机制和 npm、Yarn 的差别
| 能力 | pnpm | npm | Yarn |
|---|---|---|---|
| 磁盘内容寻址存储所有项目共享同一份文件字节 | |||
| 严格的非扁平 node_modules未声明的依赖不可访问 | |||
| 确定性的锁文件pnpm-lock.yaml 附带 peer 与链接信息 | |||
| monorepo 工作区pnpm 原生支持任务编排与 catalogs | |||
| workspace: 协议本地包引用拒绝回退到 registry | |||
| 构建脚本审批默认拦截 postinstall 等副作用 | |||
| Node.js 版本管理pnpm env / runtime 内置支持 |
Microsoft 在 Rush 仓库中使用 pnpm 管理数百个项目,每天有数百个 PR,我们发现它非常快速且可靠。
换掉你的包管理器
一条命令装上 pnpm,把 npm 换成 pnpm 继续干活即可:既有脚本、CI 与 node_modules 大体无缝兼容。
$ npm i -g pnpm && pnpm install