# 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

# 5. 适用场景

  • 需要优化多项目的磁盘空间占用。
  • 追求更快的依赖安装速度。
  • 希望避免扁平化 node_modules 带来的隐式依赖问题。

# 6. 注意事项

  • 某些极端场景下(如对 node_modules 结构强依赖的工具链),可能需要测试兼容性。
  • 全局存储路径可通过 pnpm config set store-dir <path> 自定义。

PNPM 已成为许多大型项目(如 Vue、Vite 等)的推荐工具,适合现代前端或 Node.js 开发。

Last Updated: 6/7/2025, 12:11:58 PM