PNPM 包管理器

清夏晚风 Lv7

pnpm 是另一个非常流行的 JavaScript/TypeScript 包管理器,由 Facebook (现为 Meta) 的工程师 Matt Fradd 创建。

如果你把 npm 想象成传统的“应用商店”,那么 pnpm 就更像一个经过优化、专注于速度和节省空间的“极速版”或“云存储版”。

它是 npm 社区中最大的竞争对手之一,目前在许多大型项目(包括一些知名开源库和初创公司)中广泛使用。

官方文档:https://pnpm.io/zh/installation

核心特点与优势

1. 极致的速度 (Speed)

这是 pnpm 最显著的优势。它采用了 Hardlink(硬链接)技术:

  • 原理:当多个不同的包依赖同一个文件(例如很多库都用了 lodash 或 axios)时,pnpm 不会在每个项目中复制一份该文件,而是只保留一份在服务器端,并在本地建立链接。
  • 结果:
    • 安装快:因为不需要重复下载大量冗余的文件。
    • 打包小:最终生成的 node_modules 文件夹体积通常比 npm 的小得多(有时可减少高达 30%-50%),对于大项目部署非常友好。

2. 节省存储空间 (Storage)

由于上述的硬链接机制,pnpm 极大地减少了磁盘占用。这对于内存较小或需要频繁克隆代码的开发者来说是一个巨大优势。

3. 灵活性高

虽然默认使用 npm 的 registry,但 pnpm 允许用户自定义注册源(比如使用淘宝镜像加速下载),这一点和 npm 类似,但在配置上更加灵活。

4. 生态支持

虽然早期它不如 npm 普及,但现在它的生态已经非常成熟:

  • Vite (现代前端构建工具) 默认推荐使用 pnpm。
  • Next.js、NestJS、React Query 等主流框架都支持 pnpm。

npm vs pnpm: 简单对比

特性 npm pnpm yarn (v2+ / Berry)
核心机制 标准安装,每个包独立安装 硬链接优化共享文件 Symlinks (软链接)/Hardlinks
安装速度 较慢 (尤其是依赖冲突或大库时) 非常快 很快
磁盘占用 较大 (重复文件多) 极小 较小
配置简单度 原生,无需额外工具 命令与 npm 几乎一样 yarn init + 配置文件
插件/脚本兼容性 最高 (最原生) 很高 (大部分兼容) 中等 (需处理部分全局命令差异)

如何选择?

  • 选择 pnpm,如果:

    • 你希望获得更快的安装体验。
    • 你的项目依赖了很多公共库(导致磁盘占用过大)。
    • 你想尝试现代的前端工具链(如 Vite + React / Svelte)。
    • 你愿意为了速度和空间换取一点点生态兼容性上的微调(现在这个问题已经很少了)。
  • 继续使用 npm,如果:

    • 你是刚开始学习 JavaScript,教程和文档大多默认使用 npm。
    • 你的项目非常老旧,依赖一些极度冷门、只有 npm 原生支持的插件或脚本。
    • 团队内部已经统一了工具链,不想增加额外的配置步骤。

安装PNPM

使用npm安装为全局包

1
npm install -g pnpm

使用PNPM

更新PNPM

1
pnpm self-update

更新项目内的依赖

1
pnpm update --latest

基本使用命令

pnpm 的命令行与 npm 非常相似,几乎可以直接互换:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 初始化项目
pnpm init

# 安装包 (等同于 npm install)
pnpm install lodash

# 安装开发依赖 (等同于 npm install -D)
pnpm add react --dev

# 安装包为生产依赖 (等同于 npm install -S)
pnpm add axios

# 查看全局包列表
pnpm list -g

# 清理 package-lock.json (可选,pnpm 默认不生成该文件,而是生成 pnpm-lock.yaml,但有时为了兼容也会处理)
rm package-lock.json

总结:
pnpm 是 npm 的强力替代品和优化版。在性能敏感的场景下,它通常优于 npm;而在兼容性要求极高的老旧项目中,npm 仍然是首选。随着社区的发展,两者的界限正在逐渐模糊,选择 pnpm 绝不会让你“无法使用”任何现代工具。

  • Title: PNPM 包管理器
  • Author: 清夏晚风
  • Created at : 2026-06-30 23:09:22
  • Updated at : 2026-09-24 06:18:38
  • Link: https://blog.yuil.cn/2026/06/30/程序设计语言/Node.js/Node.js 包管理器/PNPM/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments