跳到主要内容
pnpm

自 2016 年起,久经生产环境考验

快速、节省磁盘空间的包管理器

100 个项目用同一个依赖,磁盘上只存一份。pnpm 用内容寻址存储与硬链接重写 node_modules 的组织方式:安装比 npm 快达 2 倍,依赖树严格可复现。

$ npm i -g pnpm
node_modules 解剖100 个项目共用同一份文件
内容寻址存储~/.pnpm-store/v3/files000000001000000002000000004000000005000000006000000007project_1is-odd/index.jsis-odd/LICENSE.mdproject_2is-even/index.jsis-even/LICENSE.md硬链接 hard link不占额外空间project_1is-odd/index.jsis-odd/LICENSE.mdproject_2is-even/index.jsis-even/LICENSE.md整份拷贝 ×N整份拷贝 ×N磁盘 ×2 起步磁盘占用
pnpm 使用内容寻址存储与硬链接组织依赖;npm 为每个项目维护完整副本。

为什么选它

快速

比同类方案快达 2 倍,安装速度随缓存与并行策略持续领先。

深入了解

高效

node_modules 中的文件都从单一内容寻址存储硬链接而来,数万项目共享同一份字节。

深入了解

非常适合 monorepo

一等公民的工作区支持:任务编排、目录(catalogs)、分支锁文件。

深入了解

严格

一个包只能访问其 package.json 中声明的依赖,幽灵依赖无从生存。

深入了解

确定性

由 pnpm-lock.yaml 锁文件保证任何机器上重现完全相同的依赖树。

深入了解

还是 Node.js 版本管理器

pnpm env / pnpm runtime 管理 Node 版本与全局 shim,一个工具两条管线。

深入了解

随处可用

支持 Windows、Linux 与 macOS,从 CI 容器到 WSL 行为一致。

久经考验

自 2016 年起,各种规模的团队在生产环境中使用,微软 Rush 仓库以数百项目验证。

深入了解

磁盘上只存一份

pnpm 使用内容寻址存储,把磁盘上所有模块目录的文件统一存放。依赖不同版本时,只有存在差异的文件会进入存储:一个 100 文件的包升级只改动 1 个文件,pnpm update 就只新增 1 个文件。

安装时,文件从存储的同一位置硬链接(或写时复制的引用链接)进入各项目的 node_modules,不占用额外空间。你省下的磁盘与项目数、依赖数成正比。

阅读完整动机
  1. 依赖解析

    识别全部所需依赖,并拉取到内容寻址存储。

  2. 结构计算

    基于依赖声明计算非扁平的 node_modules 目录树。

  3. 硬链接装配

    从存储把文件硬链接进各项目,缺失才回源。

快,是有据可查的

快达 npm 与 Yarn classic 的两倍

上图是在依赖众多的 alotta-files 项目上的安装基准(越小越好):全新安装、缓存安装、 更新依赖等场景全面领先。数据来自官方 benchmark,Node.js v24.19.0,采集于 2026-09-04。

性能背后的机制
alotta-files 基准测试:npm、pnpm 与 pnpm Rust 版在各场景下的安装耗时对比条形图
图源:pnpm.io/benchmarks

和 npm、Yarn 的差别

能力pnpmnpmYarn
磁盘内容寻址存储所有项目共享同一份文件字节
严格的非扁平 node_modules未声明的依赖不可访问
确定性的锁文件pnpm-lock.yaml 附带 peer 与链接信息
monorepo 工作区pnpm 原生支持任务编排与 catalogs
workspace: 协议本地包引用拒绝回退到 registry
构建脚本审批默认拦截 postinstall 等副作用
Node.js 版本管理pnpm env / runtime 内置支持
完整功能对比表

Microsoft 在 Rush 仓库中使用 pnpm 管理数百个项目,每天有数百个 PR,我们发现它非常快速且可靠。

赞助商

pnpm 是开源项目,由这些公司与个人通过OpenCollective支持。

白金赞助

  • Bit
  • OpenAI
  • Notion
  • CodeRabbit

金牌赞助

  • Sanity
  • Discord
  • Vite
  • SerpApi
  • StackBlitz
  • Workleap
  • Nx
  • Latitude

银牌赞助

  • Replit
  • Cybozu
  • BairesDev
  • Thesys
  • devowl.io
  • u|screen
  • Leniolabs
  • Depot
  • Cerbos

Logo 与赞助名单来自 pnpm 官方;成为赞助商

换掉你的包管理器

一条命令装上 pnpm,把 npm 换成 pnpm 继续干活即可:既有脚本、CI 与 node_modules 大体无缝兼容。

$ npm i -g pnpm && pnpm install