Skip to content

npm vs pnpm vs cnpm vs yarn - 四大包管理器深度对比

一、核心要点速览

💡 核心考点

  • npm: Node.js 官方包管理器,最成熟稳定
  • pnpm: 节省磁盘空间 + 极速安装,后起之秀
  • yarn: Facebook 开发,曾解决 npm 痛点,现逐渐没落
  • cnpm: 淘宝镜像,国内访问快,但有兼容性问题
  • 推荐选择: 新项目 pnpm,保守选 npm,国内快速用 cnpm

二、重要资源链接

资源链接说明
npm 官网npmjs.com官方包仓库
pnpm 官网pnpm.io文档、介绍
yarn 官网yarnpkg.comYarn 包管理器
cnpmnpmmirror.com淘宝 NPM 镜像
包管理器对比pnpm.io/benchmarks性能测试数据

三、各包管理器详解

1. npm (Node Package Manager)

┌──────────────────────────────────────────────────────────┐
│                    npm 简介                               │
└──────────────────────────────────────────────────────────┘

基本信息:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
开发者:Node.js 官方(Isaac Z. Schlueter)
发布时间:2010 年
当前版本:v10.x (2024)
语言:JavaScript

定位:Node.js 生态系统的标准包管理器
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

核心特点:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✓ 官方标准
  Node.js 自带,无需额外安装
  所有包的首选发布平台

✓ 生态最完善
  最大的 JavaScript 包仓库
  超过 200 万个包

✓ 稳定性好
  经过十多年验证
  企业级应用首选

✓ v5+ 性能提升
  内置缓存机制
  并行安装包
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

安装方式:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# 随 Node.js 一起安装
下载 Node.js 即包含 npm

# 查看版本
npm --version

# 升级到最新版
npm install -g npm@latest
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

常用命令:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
npm install <package>           # 安装包
npm install -g <package>        # 全局安装
npm uninstall <package>         # 卸载包
npm update                      # 更新包
npm list                        # 列出已安装包
npm outdated                    # 检查过期包
npm audit                       # 安全审计
npm run <script>                # 运行脚本
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

2. pnpm (Performant npm)

┌──────────────────────────────────────────────────────────┐
│                   pnpm 简介                               │
└──────────────────────────────────────────────────────────┘

基本信息:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
开发者:Roxing Zhu (中国人)
发布时间:2016 年
当前版本:v8.x (2024)
语言:TypeScript

定位:节省空间 + 快速的包管理器
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

核心创新:符号链接 + 内容寻址存储
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
传统方式 (npm/yarn):
  project-a/node_modules/[email protected]
  project-b/node_modules/[email protected]
  
  ❌ 同一包在不同项目重复存储
  ❌ 浪费磁盘空间

pnpm 方式:
  ~/.pnpm-store/[email protected]/       ← 全局存储
  project-a/node_modules/        ← 符号链接
    └─ pkg -> ~/.pnpm-store/...
  
  project-b/node_modules/        ← 符号链接
    └─ pkg -> ~/.pnpm-store/...
  
  ✓ 同一包只存一份
  ✓ 节省 50%+ 磁盘空间
  ✓ 安装速度更快
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

核心优势:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✓ 节省磁盘空间
  比 npm/yarn 节省 50%-70% 空间
  100 个项目只用 1 个项目的空间

✓ 安装速度快
  利用缓存,相同包秒装
  比 npm 快 2-3 倍

✓ 避免幽灵依赖
  严格的依赖隔离
  package.json 没写的包无法使用

✓ 支持 monorepo
  原生支持多包项目管理
  workspace 支持优秀

✓ 兼容性好
  完全兼容 npm 的所有功能
  可直接替换 npm
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

安装使用:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# 安装 pnpm
npm install -g pnpm

# 查看版本
pnpm --version

# 使用 pnpm 安装包
pnpm install express
pnpm add -D typescript
pnpm add -g eslint

# 替代 npm 使用
pnpm run dev      # = npm run dev
pnpm build        # = npm run build
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

3. yarn (Yet Another Resource Negotiator)

┌──────────────────────────────────────────────────────────┐
│                   yarn 简介                               │
└──────────────────────────────────────────────────────────┘

基本信息:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
开发者:Facebook
发布时间:2016 年
当前版本:v4.x (2024)
语言:JavaScript

定位:解决 npm 痛点的替代方案(历史使命已完成)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

发展历程:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Yarn Classic (v1):
  2016 年发布,解决 npm v3 的问题
  ✓ 离线缓存
  ✓ 并行安装
  ✓ 确定性版本
  ✗ 需要单独安装
  ✗ 命令语法不同

Yarn Berry (v2/v3/v4):
  2020 年发布,全新架构
  ✓ Plug'n'Play (PnP)
  ✓ Zero-Installs
  ✓ 更好的 workspace
  ✗ 不兼容 npm
  ✗ 学习成本高

现状:
  npm v5+ 已解决大部分问题
  Yarn 用户逐渐流失
  新项目较少使用
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

核心特性:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✓ 离线模式
  安装过的包可离线重装

✓ 并行安装
  同时下载多个包

✓ 确定性版本
  yarn.lock 确保一致性

✓ Plug'n'Play (v2+)
  无需 node_modules
  直接通过 .pnp.js 加载

✓ Workspaces
  Monorepo 支持
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

常用命令:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
yarn add <package>              # 安装包
yarn add -D <package>           # 开发依赖
yarn remove <package>           # 卸载包
yarn upgrade                    # 更新包
yarn install                    # 安装所有依赖
yarn run <script>               # 运行脚本
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

4. cnpm (China npm)

┌──────────────────────────────────────────────────────────┐
│                   cnpm 简介                               │
└──────────────────────────────────────────────────────────┘

基本信息:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
开发者:淘宝团队
发布时间:2013 年
当前版本:v9.x (2024)
语言:JavaScript

定位:中国专用的 npm 镜像客户端
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

核心价值:解决国内访问 npm 慢的问题
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
问题背景:
  npm 官方服务器在国外
  国内访问速度慢(10-30 秒)
  偶尔连接超时或失败

解决方案:
  淘宝建立国内镜像服务器
  同步 npm 官方仓库
  国内访问速度提升到 1-3 秒
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

安装使用:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# 安装 cnpm
npm install -g cnpm --registry=https://r.npm.taobao.org

# 使用 cnpm
cnpm install express
cnpm install -g typescript

# 临时使用淘宝镜像
npm install --registry=https://r.npm.taobao.org

# 永久配置(推荐)
npm config set registry https://r.npm.taobao.org
npm config get registry  # 验证配置
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

优缺点:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
优点 ✓:
  ✓ 国内访问速度快(1-3 秒)
  ✓ 与 npm 完全兼容
  ✓ 安装简单
  ✓ 免费使用

缺点 ✗:
  ✗ 同步延迟(比官方慢几分钟)
  ✗ 部分包可能缺失
  ✗ 安全性依赖淘宝
  ✗ 仅适合国内使用
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

注意事项:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚠️ 生产环境慎用
  可能存在包版本不一致
  建议使用官方源或私有源

⚠️ 企业最佳实践
  搭建私有 npm 镜像
  如 Verdaccio、Nexus
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

四、详细对比表

核心特性对比

特性npmpnpmyarncnpm
开发者Node.js 官方个人开源Facebook淘宝
发布时间2010201620162013
当前版本v10.xv8.xv4.xv9.x
安装方式随 Node.js需单独安装需单独安装需单独安装
是否需要 node_modules✓ (v1)
Plug'n'Play✓ (v2+)
Workspace 支持
离线缓存

性能对比

指标npmpnpmyarn v1yarn v4cnpm
安装速度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
磁盘占用⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
首次安装基准快 2-3 倍快 1.5 倍快 1.5 倍快 2-3 倍
二次安装基准快 5-10 倍快 3-5 倍快 3-5 倍快 5-10 倍
国内访问中等中等中等极快

兼容性对比

兼容性npmpnpmyarn v1yarn v4cnpm
npm 命令兼容-
package.json
lock 文件package-lock.jsonpnpm-lock.yamlyarn.lockyarn.lockpackage-lock.json
scripts 运行npm runpnpm runyarn runyarn runcnpm run
全局包
monorepo⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

生态系统对比

方面npmpnpmyarncnpm
包数量200 万 +复用 npm复用 npm同步 npm
社区活跃度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
文档质量⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
企业采用⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
框架支持全部全部全部全部

五、实际使用场景

推荐使用场景

┌──────────────────────────────────────────────────────────┐
│                  包管理器选择指南                         │
└──────────────────────────────────────────────────────────┘

选择决策树:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
开始选择包管理器


是否在中国大陆?

    ├─ 是 → 网络要求高?
    │   │
    │   ├─ 是 → cnpm ✓
    │   │   └─ 国内最快
    │   │
    │   └─ 否 → 继续判断

    └─ 否 → 继续判断


是否是全新项目?

    ├─ 是 → 团队偏好?
    │   │
    │   ├─ 追求性能 → pnpm ✓
    │   │   └─ 节省空间 + 快速
    │   │
    │   ├─ 保守求稳 → npm ✓
    │   │   └─ 最成熟可靠
    │   │
    │   └─ 已有 Yarn 经验 → yarn ✓
    │       └─ 延续习惯

    └─ 否 → 已有项目?

        ├─ 是 → 当前用什么?
        │   │
        │   ├─ npm → 继续 npm 或升级 pnpm ✓
        │   ├─ yarn → 继续 yarn 或升级 pnpm ✓
        │   └─ pnpm → 继续 pnpm ✓

        └─ 否 → 根据以下因素:

            ├─ 磁盘空间紧张 → pnpm ✓
            ├─ Monorepo 项目 → pnpm/yarn ✓
            ├─ 需要 PnP → yarn v4 ✓
            └─ 企业私有化 → npm/nexus ✓
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

具体推荐

推荐方案:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 新项目(2024+)
  首选:pnpm
  理由:性能好、节省空间、未来趋势
  代表:Vue 3、Vite、Next.js

✅ 企业级项目
  首选:npm
  理由:最稳定、生态好、支持好
  代表:Angular、NestJS

✅ Monorepo 项目
  首选:pnpm 或 yarn v4
  理由:workspace 支持优秀
  代表:Babel、React(pnpm)

✅ 国内快速开发
  首选:cnpm 或 npm + 淘宝镜像
  理由:访问速度快
  代表:个人项目、小团队

✅ 学习/练习
  首选:npm
  理由:教程多、问题少
  代表:初学者、学生
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

六、迁移指南

npm → pnpm

迁移步骤(简单):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Step 1: 安装 pnpm
  npm install -g pnpm

Step 2: 删除旧依赖
  rm -rf node_modules package-lock.json

Step 3: 使用 pnpm 安装
  pnpm install

Step 4: 修改 scripts(可选)
  将 npm run xxx 改为 pnpm run xxx

Step 5: 提交新 lock 文件
  git add pnpm-lock.yaml

预计时间:5-10 分钟
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

yarn → pnpm

迁移步骤(简单):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Step 1: 安装 pnpm
  npm install -g pnpm

Step 2: 删除旧依赖
  rm -rf node_modules yarn.lock

Step 3: 使用 pnpm 安装
  pnpm install

Step 4: 提交
  git add pnpm-lock.yaml

注意:yarn workspaces 会自动迁移
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

七、常见问题解决

问题排查表

问题原因解决方案
pnpm 报错找不到包严格的依赖隔离将该包添加到 dependencies
yarn PnP 不兼容部分库不支持 PnP使用 nodeLinker: node-modules
cnpm 包缺失镜像同步延迟切换到官方源或等待同步
切换源后仍慢DNS 问题修改 hosts 或使用代理
权限错误全局安装权限sudo 或修复 npm 权限

配置优化

bash
# ========== npm 配置优化 ==========
# 设置淘宝镜像(国内)
npm config set registry https://r.npm.taobao.org

# 设置日志级别
npm config set loglevel error

# 禁用进度条(CI/CD)
npm config set progress false


# ========== pnpm 配置优化 ==========
# .npmrc 文件
shamefully-hoist=true       # 平铺依赖(兼容某些包)
strict-peer-dependencies=false  # 放宽 peerDependencies
auto-install-peers=true     # 自动安装 peer 依赖


# ========== yarn 配置优化 ==========
# .yarnrc.yml
nodeLinker: node-modules    # 使用 node_modules 模式
enableGlobalCache: true     # 启用全局缓存

八、面试标准回答

npm、pnpm、yarn、cnpm 都是 JavaScript 的包管理器,用于安装、管理和发布 Node.js 包。

npm 是 Node.js 官方的包管理器,是最成熟稳定的选择,生态最完善,但安装速度和磁盘占用相对较差。

pnpm 是后起之秀,采用符号链接 + 内容寻址存储的创新方式,比 npm 节省 50-70% 磁盘空间,安装速度快 2-3 倍,还能避免幽灵依赖问题。越来越多的项目(如 Vue 3、Vite)已切换到 pnpm。

yarn 是 Facebook 开发的,曾经解决了 npm v3 的很多痛点(离线缓存、并行安装),但随着 npm v5+ 的改进,这些优势已不明显。Yarn v2+ 的 PnP 模式虽然创新,但兼容性有问题,导致用户流失。

cnpm 是淘宝团队的 npm 镜像客户端,主要解决国内访问 npm 慢的问题,速度确实很快,但存在同步延迟和包缺失的风险。

我的选择建议

  • 新项目:首选 pnpm(性能好、是趋势)
  • 企业项目:稳妥选 npm(成熟稳定)
  • Monorepo:pnpm 或 yarn v4(workspace 支持好)
  • 国内开发:cnpm 或 npm+ 淘宝镜像(速度快)

实际项目中,我推荐使用 pnpm,因为它在保持 npm 兼容性的同时,提供了显著的性能提升和空间节省,代表了包管理器的未来方向。


九、记忆口诀

包管理器歌诀:

npm 是老大哥,
Node 自带最稳妥。
生态完善稳定性,
企业项目首选它!

pnpm 是新锐,
节省空间速度快。
符号链接是核心,
幽灵依赖不再有!

yarn 当年很风光,
解决 npm 老问题。
如今优势不再来,
用户逐渐在流失!

cnpm 是国内宝,
淘宝镜像速度快。
同步延迟要注意,
生产环境需谨慎!

选择建议要记牢:
新项目用 pnpm,
保守求稳选 npm,
国内快速用 cnpm,
Monorepo 看需求!

十、推荐资源


十一、总结一句话

  • npm: 官方标准 + 生态完善 = 最稳妥选择 📦
  • pnpm: 节省空间 + 极速安装 = 未来的趋势
  • yarn: 曾经辉煌 + 创新 PnP = 逐渐没落 📉
  • cnpm: 淘宝镜像 + 国内加速 = 特定场景优选 🇨🇳
  • 推荐: 新项目 pnpm,保守 npm,国内 cnpm = 最佳组合
最近更新