pnpm(Performant npm)是一个快速、节省磁盘空间的 JavaScript 包管理工具。
核心区别:
-
存储机制
- pnpm:使用内容寻址存储,所有包存储在全局 store,项目中通过硬链接引用
- npm/Yarn:每个项目都会复制一份 node_modules,占用大量磁盘空间
-
安装速度
- pnpm:由于硬链接机制,第二次安装时速度极快
- npm/Yarn:每次都需要重新下载或复制文件
-
依赖结构
- pnpm:使用非扁平化的 node_modules 结构,通过符号链接创建严格的依赖树
- npm/Yarn:使用扁平化结构,可能导致"幽灵依赖"问题
-
磁盘空间
- pnpm:多项目共享同一份包,节省 70% 以上磁盘空间
- npm/Yarn:每个项目独立存储,重复占用空间
示例对比:
bash# npm 安装 npm install lodash # node_modules 中包含完整的 lodash 副本 # pnpm 安装 pnpm add lodash # node_modules 中只是指向全局 store 的硬链接
优势总结:
- 更快的安装速度
- 更少的磁盘占用
- 更严格的依赖管理,避免幽灵依赖
- 更好的 monorepo 支持