pnpm和npm有什么区别

0 阅读1分钟

核心差异一句话:
npm 是每个项目各拷贝一份依赖;pnpm 通过“全局内容寻址 + 硬链接”让所有项目共享同一份依赖实体,磁盘占用和安装时间大幅缩减,并天然避免“幽灵依赖”。

  1. 磁盘占用
  • npm:每个 node_modules 都放完整包体,多项目就多次复制,空间翻倍。

  • pnpm:包实体只存一份在全局仓库,各项目用硬链接/符号链接指向它,空间节省 50 %–80 %

  1. 安装速度
  • npm:串行 + 重复下载,大项目首次安装慢。

  • pnpm:并行 + 全局缓存命中即秒链,首次比 npm 快 2× 左右,缓存命中后再次安装几乎瞬间完成

  1. 依赖结构
  • npm:扁平化后仍可能出现“幽灵依赖”(代码 require 了未在 package.json 声明的包)。

  • pnpm:严格的“依赖隔离”树,只有声明过的包才能在 require 解析路径中出现,潜在问题提前暴露

  1. 锁文件
  • npm:package-lock.json

  • pnpm:pnpm-lock.yaml,格式更紧凑且跨平台一致性更强。

  1. 兼容性/生态
  • npm:Node.js 内置,工具链默认支持,无踩坑风险。

  • pnpm:兼容 95 % 场景,但部分老旧包或特殊 postinstall 脚本遇到硬链接会报错,需要配置 node-linker=hoisted 回退

  1. 适用场景速览
  • npm:小团队、求稳、不想额外折腾。

  • pnpm:多项目并行、笔记本硬盘小、CI 频繁构建、Monorepo

一句话总结:
想“装得快、用得省、结构干净”就选 pnpm;要“零配置、最大兼容”就继续 npm。