npm / pnpm / cnpm 的区别

先给一个一句话对比结论

npm 是官方基础款,
pnpm 是为“工程规模”和“效率”优化的,
cnpm 是为“国内网络环境”兜底的。


一、npm 是什么?(基准线)

npm(Node Package Manager)

Node.js 官方自带的包管理器。

它做了什么?

  • 下载依赖
  • 管理版本
  • 执行脚本
npm install
npm run dev

npm 的优点

✅ 官方
✅ 生态最大
✅ 人人都会


npm 的核心问题(为什么后来会有 pnpm)

1️⃣ node_modules 非常大

  • 每个项目都复制一整套依赖
  • 磁盘占用高

2️⃣ 安装慢(尤其国内)

  • 网络不稳定
  • 包层级深

3️⃣ 依赖“幽灵化”

npm 允许:

A 依赖 B
C 也能偷偷用 B(即使没声明)

👉 项目表面能跑,实际依赖不干净


二、cnpm 是什么?(国内环境产物)

cnpm

npm 的“国内镜像版 + 客户端”。

核心目的只有一个:

解决 npm 在国内下载慢、失败的问题


cnpm 的工作方式

  • 使用 淘宝 npm 镜像
  • 命令和 npm 几乎一样
cnpm install

cnpm 的优点

✅ 国内下载快
✅ 老项目兼容好


cnpm 的问题(现在用得少了)

❌ 非官方

  • 和 npm 行为不完全一致
  • 有历史兼容坑

❌ node_modules 结构更混乱

  • 扁平化 + 软链接
  • 某些工具不兼容

👉 企业级项目基本不推荐 cnpm


现在国内更推荐什么?

npm config set registry https://registry.npmmirror.com

👉 用 npm,但换国内镜像


三、pnpm 是什么?(企业级首选)

pnpm(Performance npm)

一个为 大型项目 / 企业工程 设计的包管理器。


pnpm 最核心的设计:内容寻址 + 硬链接

npm 的方式(简化)

node_modules/
  vue/
  axios/
  lodash/

每个项目一套。


pnpm 的方式(核心差异)

~/.pnpm-store/
  vue@3.4.0/
  axios@1.6.0/

项目里:

node_modules/
  vue -> 硬链接

👉 所有项目共享一份依赖


pnpm 带来的直接好处

1️⃣ 安装速度快

  • 只下载一次
  • 之后秒装

2️⃣ 磁盘占用极低

  • 10 个项目 ≠ 10 份依赖

3️⃣ 依赖更严格(非常重要)

pnpm 不允许“偷偷用依赖”

没在 package.json 里声明?
→ 直接报错

👉 项目依赖更干净,线上风险更低


pnpm 的“严格”带来的副作用

❌ 老项目可能跑不起来
❌ 有些写得不规范的库会暴露问题

但对企业来说,这是 优点,不是缺点


四、三者核心对比表(工程视角)

维度npmcnpmpnpm
官方
国内速度
安装速度
磁盘占用
依赖严格性
企业推荐一般不推荐强烈推荐
生态兼容最好一般

五、企业为什么现在“几乎都选 pnpm”?

从工程治理角度看:

1️⃣ 成本问题

  • 磁盘
  • CI 构建时间
  • 网络资源

pnpm 全部更省。


2️⃣ 质量问题

pnpm 强制:

  • 依赖必须声明
  • 构建行为可预测

👉 减少“开发能跑、线上挂”的情况


3️⃣ 单仓库(Monorepo)友好

pnpm 对:

  • 多包项目
  • 组件库
  • 平台型系统

支持非常好。


六、你在什么情况下用谁?

✅ 学习 / 小项目

npm + 国内镜像

✅ 企业项目 / 中大型工程

pnpm(首选)

❌ 不推荐新项目

cnpm

除非你在维护非常老的项目


七、一句话终极总结

npm 是“标准”,
pnpm 是“工程化的未来”,
cnpm 是“历史环境下的妥协方案”。

发表回复