# pnpm是什么?
PNPM(全称:Performant NPM)是一个高效的 Node.js 包管理工具,旨在解决 npm 和 Yarn 在依赖管理中的一些痛点(如磁盘空间占用和安装速度问题)。以下是它的核心特点和优势:
# 1. 核心原理:硬链接 + 符号链接
- 硬链接(Hard Links):所有项目的依赖都会从全局存储(
~/.pnpm-store
)硬链接到项目的node_modules
,避免重复下载相同的包,显著节省磁盘空间。 - 符号链接(Symbolic Links):依赖按实际依赖关系嵌套组织,但通过符号链接保持扁平化访问,避免幽灵依赖(Phantom Dependencies)问题。
# 2. 主要优势
- 极快的安装速度:比 npm/Yarn 快 2-3 倍(尤其是冷安装)。
- 节省磁盘空间:所有项目共享同一份依赖的物理存储。
- 严格的依赖结构:
node_modules
中只有显式声明的依赖可访问,避免隐式依赖问题。 - 兼容性:完全支持
package.json
和 npm 的生态(包括 workspaces)。
# 3. 与 npm/Yarn 的区别
特性 | PNPM | npm / Yarn |
---|---|---|
安装速度 | 快(硬链接复用) | 较慢(复制文件) |
磁盘占用 | 共享存储,占用极少 | 每个项目独立占用 |
node_modules 结构 | 嵌套 + 符号链接 | 扁平化(可能导致问题) |
安全性 | 严格隔离依赖 | 可能存在幽灵依赖 |
# 4. 常用命令
# 安装依赖
pnpm install
# 添加依赖
pnpm add <package>
# 运行脚本
pnpm run <script>
# 全局存储管理
pnpm store prune # 清理未使用的包
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 5. 适用场景
- 需要优化多项目的磁盘空间占用。
- 追求更快的依赖安装速度。
- 希望避免扁平化
node_modules
带来的隐式依赖问题。
# 6. 注意事项
- 某些极端场景下(如对
node_modules
结构强依赖的工具链),可能需要测试兼容性。 - 全局存储路径可通过
pnpm config set store-dir <path>
自定义。
PNPM 已成为许多大型项目(如 Vue、Vite 等)的推荐工具,适合现代前端或 Node.js 开发。
← 初始化新项目方式1 pnpm是谁开发的呢? →