什么是 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 结构问题的实验项目。
社区认可
pnpm 开始获得开发者社区的关注,其独特的存储方式和性能优势吸引了第一批用户。
广泛采用
随着 v5 版本的发布,pnpm 增加了对工作区的支持,开始被一些知名项目采用,包括 Vue.js 等。
成为主流
pnpm 下载量突破 10 亿次,成为前端开发中广泛使用的包管理器之一,许多大型企业开始采用。
持续发展
pnpm 拥有活跃的社区和开发团队,不断迭代更新,提供更多功能和更好的性能,成为 npm 和 yarn 的有力替代品。
工作原理动画展示
pnpm 采用独特的内容可寻址存储和硬链接机制,大幅提高效率
传统包管理器
重复存储相同依赖
pnpm 方式
单一存储,多项目共享
优缺点分析
优点
- 更快的安装速度 - 比 npm 和 yarn 快 2-3 倍,特别是在冷缓存情况下
- 节省磁盘空间 - 通过内容可寻址存储,相同的包只存储一次
- 严格的依赖管理 - 避免了 npm 扁平化 node_modules 带来的依赖污染问题
- 支持工作区 - 对 monorepo 项目有良好支持
- 向后兼容 - 支持 npm 和 yarn 的配置文件和命令
- 安全可靠 - 避免了依赖劫持等安全问题
缺点
- 生态系统兼容性 - 少数老旧项目可能不兼容 pnpm 的非扁平化 node_modules
- 学习曲线 - 对于习惯了 npm/yarn 的开发者,需要适应一些差异
- 某些工具支持有限 - 少数构建工具对 pnpm 的支持不够完善
- 链接问题 - 在某些系统上,硬链接和符号链接可能导致问题
- 缓存复杂性 - 缓存系统偶尔会导致一些难以调试的问题
包管理器性能对比 (秒)
免费资源与使用方法
pnpm 是完全免费的开源软件,以下是获取和使用的方法
免费资源
安装与基本使用
1 安装 pnpm
使用 npm 安装:
使用 Homebrew (macOS):
使用 curl:
2 基本命令
安装项目依赖:
安装新包:
安装开发依赖:
运行脚本:
卸载包:
更新依赖:
3 从 npm/yarn 迁移
pnpm 与 npm 和 yarn 的命令非常相似,迁移通常很简单:
社区评价
来自开发者社区的真实评价