pnpm

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

pnpm 采用独特的存储机制,比 npm 和 yarn 节省大量磁盘空间,同时提供更快的安装速度

什么是 pnpm?

pnpm 是 "Performant npm" 的缩写,是一个快速、磁盘空间高效的 Node.js 包管理器。它由 Zoltan Kochan 于 2017 年创建,旨在解决 npm 和 yarn 存在的性能和磁盘空间问题。

与其他包管理器不同,pnpm 使用内容可寻址存储来存储包,这意味着相同的包只会在磁盘上存储一次,大大减少了磁盘空间的占用。

名字含义

pnpm 代表 "Performant npm"(高性能的 npm),体现了其设计初衷:提供比传统包管理器更好的性能。

# pnpm 安装速度对比
$ time npm install
real    0m45.234s

$ time yarn install
real    0m32.156s

$ time pnpm install
real    0m12.789s
更快 更高效

起源与发展

诞生之初

pnpm 由 Zoltan Kochan 于 2017 年创建,最初是作为解决 npm 3+ 中扁平化 node_modules 结构问题的实验项目。

2017
2018

社区认可

pnpm 开始获得开发者社区的关注,其独特的存储方式和性能优势吸引了第一批用户。

广泛采用

随着 v5 版本的发布,pnpm 增加了对工作区的支持,开始被一些知名项目采用,包括 Vue.js 等。

2020
2022

成为主流

pnpm 下载量突破 10 亿次,成为前端开发中广泛使用的包管理器之一,许多大型企业开始采用。

持续发展

pnpm 拥有活跃的社区和开发团队,不断迭代更新,提供更多功能和更好的性能,成为 npm 和 yarn 的有力替代品。

现在

工作原理动画展示

pnpm 采用独特的内容可寻址存储和硬链接机制,大幅提高效率

传统包管理器

项目A
项目B
lodash@4.17
lodash@4.17

重复存储相同依赖

pnpm 方式

项目A
项目B
lodash@4.17

单一存储,多项目共享

优缺点分析

优点

  • 更快的安装速度 - 比 npm 和 yarn 快 2-3 倍,特别是在冷缓存情况下
  • 节省磁盘空间 - 通过内容可寻址存储,相同的包只存储一次
  • 严格的依赖管理 - 避免了 npm 扁平化 node_modules 带来的依赖污染问题
  • 支持工作区 - 对 monorepo 项目有良好支持
  • 向后兼容 - 支持 npm 和 yarn 的配置文件和命令
  • 安全可靠 - 避免了依赖劫持等安全问题

缺点

  • 生态系统兼容性 - 少数老旧项目可能不兼容 pnpm 的非扁平化 node_modules
  • 学习曲线 - 对于习惯了 npm/yarn 的开发者,需要适应一些差异
  • 某些工具支持有限 - 少数构建工具对 pnpm 的支持不够完善
  • 链接问题 - 在某些系统上,硬链接和符号链接可能导致问题
  • 缓存复杂性 - 缓存系统偶尔会导致一些难以调试的问题

包管理器性能对比 (秒)

免费资源与使用方法

pnpm 是完全免费的开源软件,以下是获取和使用的方法

安装与基本使用

1 安装 pnpm

使用 npm 安装:

npm install -g pnpm

使用 Homebrew (macOS):

brew install pnpm

使用 curl:

curl -fsSL https://get.pnpm.io/install.sh | sh -

2 基本命令

安装项目依赖:

pnpm install

安装新包:

pnpm add react

安装开发依赖:

pnpm add -D typescript

运行脚本:

pnpm run dev

卸载包:

pnpm remove lodash

更新依赖:

pnpm update

3 从 npm/yarn 迁移

pnpm 与 npm 和 yarn 的命令非常相似,迁移通常很简单:

# 1. 安装 pnpm(见上文) # 2. 删除 node_modules 文件夹 rm -rf node_modules # 3. 删除 package-lock.json 或 yarn.lock rm package-lock.json yarn.lock # 4. 使用 pnpm 安装依赖 pnpm install # 现在你可以使用 pnpm 代替 npm/yarn 了!

社区评价

来自开发者社区的真实评价

准备好尝试 pnpm 了吗?

加入数百万开发者的行列,体验更快、更高效的包管理方式