Skip to content
 

npm / yarn / pnpm 完整对比总结

更新: 8/24/2026字数: 0 字 时长: 0 分钟

目前 JavaScript 生态中最主流的三个包管理器是 npmyarnpnpm。它们都能完成安装依赖、管理版本、运行脚本等基础工作,但在存储方式、安装速度、磁盘占用、依赖严格性等方面差异明显。

一、基本信息

对比项npmyarnpnpm
诞生时间201020162017
是否随 Node 自带✅ 是❌ 否❌ 否
锁文件package-lock.jsonyarn.lockpnpm-lock.yaml
当前主流版本npm 10 / 11yarn Berry (v2~v4)pnpm 9 / 10 / 11
核心理念简单、兼容性优先速度 + 确定性 + 插件省空间 + 严格 + 快速

注:yarn 分为 Classic(v1)Berry(v2+)。现在讨论的优势大多指 Berry,尤其是其 Plug’n’Play(PnP)模式。

二、核心差异:存储与链接方式

包管理器存储方式说明
npm每个项目独立复制同一个包在不同项目中会完整复制多份
yarn Classic每个项目独立复制 + 全局缓存和 npm 类似,有缓存加速
yarn Berry (PnP)几乎无 node_modules.pnp.cjs 映射,实现零安装
pnpm全局内容寻址存储 + 硬链接所有项目共享同一份文件,通过硬链接引用

pnpm 的核心优势

  • 相同内容的文件在磁盘上只存一份
  • 项目通过硬链接引用,几乎不占额外空间
  • 多项目场景下磁盘占用可减少 50%~80%

三、多维度详细对比

维度npmyarnpnpm优胜者
安装速度中等(已改善)快(并行下载)最快(硬链接)pnpm
磁盘占用高(重复复制)中高 / PnP 很低极低pnpm
幽灵依赖存在Classic 存在,PnP 不存在严格杜绝pnpm
依赖隔离弱(扁平化提升)中等 / PnP 强pnpm
Monorepo 支持有(workspaces)优秀优秀yarn / pnpm
生态兼容性最好很好(PnP 需适配)很好(极少问题)npm
学习成本最低中等较低npm
Zero-Installs✅(Berry PnP)yarn
依赖补丁yarn / pnpm
对等依赖自动安装npm / pnpm
管理 Node 版本pnpm

四、什么是幽灵依赖?

幽灵依赖(Phantom Dependencies):代码里可以 import 一个没有在 package.json 中声明的包。

原因是 npm / yarn Classic 会把间接依赖提升到 node_modules 顶层。

危害

  • 本地能跑,换环境或依赖升级后可能突然报错
  • 依赖关系不清晰,不利于维护

pnpm 通过非扁平的严格结构,从根源上阻止了这个问题——只有你明确声明的依赖才能被访问。

五、常用命令对照

操作npmyarnpnpm
安装全部依赖npm installyarn / yarn installpnpm install
添加依赖npm install lodashyarn add lodashpnpm add lodash
添加开发依赖npm i -D xxxyarn add -D xxxpnpm add -D xxx
删除依赖npm uninstall xxxyarn remove xxxpnpm remove xxx
执行临时包npx xxxyarn dlx xxxpnpm dlx xxx
运行脚本npm run devyarn devpnpm dev
更新依赖npm updateyarn uppnpm update
CI 严格安装npm ciyarn install --immutablepnpm install --frozen-lockfile

六、其他重要细节

1. Corepack(推荐使用) Node.js 自带的包管理器管理工具,可统一管理 npm / yarn / pnpm 的版本:

bash
corepack enable
corepack prepare pnpm@latest --activate

2. 安全相关

  • 三者都支持审计(audit)和完整性校验
  • pnpm 支持 minimumReleaseAge(只安装发布一段时间后的包,降低供应链风险)
  • yarn Berry 默认对 postinstall 脚本更谨慎

3. 离线安装

  • npm:npm ci
  • yarn:yarn install --offline
  • pnpm:pnpm install --offline

七、适用场景建议

场景推荐选择原因
新手学习 / 小项目npm自带,零配置,兼容性最好
个人多项目开发pnpm省磁盘、安装快、严格依赖
中大型项目 / 团队pnpm速度快 + 省空间 + 避免幽灵依赖
大型 Monorepopnpmyarn Berry两者 workspaces 都很强
追求极致兼容 / 老项目npm兼容性最稳
喜欢插件生态 / 零安装yarn Berry (PnP)功能丰富,支持 Zero-Installs

八、迁移建议(以 npm → pnpm 为例)

bash
# 启用 corepack
corepack enable

# 安装并使用 pnpm
pnpm install

# 删除旧的 lock 文件
rm package-lock.json

大多数项目几乎无痛切换,只有极少数依赖扁平结构的老包可能需要微调。

九、一句话总结

  • npm:官方默认,最稳最省心,适合入门和追求兼容的场景。
  • yarn:曾经解决了 npm 的速度和确定性问题,现在 Berry 版本功能强大,尤其适合喜欢插件和 PnP 的团队。
  • pnpm:目前综合表现最均衡,省空间、速度快、依赖严格,是 2025~2026 年很多新项目的首选。

当前趋势:新项目越来越多默认选择 pnpm,npm 继续作为兜底方案存在,yarn 则在 monorepo 和特定团队中保持影响力。