pnpm依赖管理:从零开始的实践手册

一、快速入门

1.1 pnpm是什么🤔

  pnpm(performant npm,意思是高性能的 npm)是一个快速、节省磁盘空间的 Node.js 包管理器,它向后兼容 npm,这意味着绝大多数 npm 命令在 pnpm 中可以直接使用。pnpm 的设计目标是解决传统包管理器在磁盘空间和安装速度上的瓶颈,通过内容寻址的方式存储包,所有版本的依赖会集中存储在系统的一个位置,然后通过硬链接的方式链接到项目中,对于模块的每个版本,磁盘上只保存一个副本,避免了重复安装。

1.2 核心差异对照表

工具名 核心定位 本质 / 所属关系 核心职责
npm Node.js 官方默认包管理器 随 Node.js 一同安装,官方标配 管理项目依赖(安装、卸载、更新、发布)
pnpm 高性能第三方替代包管理器 第三方工具,需手动安装 同 npm 核心职责,优化性能与磁盘占用
npx Node 包执行工具 npm@5.2.0+ 自带,非包管理器 执行 Node 包的可执行文件,不管理依赖

npm 和 pnpm 是「包管理器」,负责 "存放和管理依赖";npx 是「执行工具」,负责 "运行依赖包",三者不是同一维度的工具!

特性 npm pnpm npx
主要用途 依赖管理、脚本运行 依赖管理(提速+省盘) 一次性/临时命令
安装后是否留在硬盘 是(全局 store 硬链接) 否(用完即删)
是否解除"幽灵依赖" ❌ 扁平 node_modules 易产生 ✅ 严格依赖树 ---
Monorepo 帮助 需自己配 workspace 原生 workspace,体验最好 ---
速度排名 最快 仅运行阶段快
是否可发布包
是否需单独安装 随 Node 自带 npm i -g pnpm 随 npm 自带

1.3 安装 pnpm

  安装 pnpm 有多种方式,可以根据喜好和系统环境选择。

使用 npm 安装

  这是最通用、最简单的方法。打开终端(Windows 用户可使用 PowerShell 或 CMD),运行以下命令。注意:需要先安装:Node环境(✅) 、npm环境(✅)。

bash 复制代码
# 全局安装
npm install -g pnpm

  执行上述命令会通过 npm 将 pnpm 安装到全局环境。安装完成后,运行以下命令检查版本。如果能正常显示版本号,说明安装成功。

bash 复制代码
pnpm --version

使用独立脚本安装

  对于 macOS 或 Linux 用户,可以使用以下脚本安装:

bash 复制代码
# macOS/Linux
curl -fsSL https://get.pnpm.io/install.sh | sh -

# Windows (PowerShell)
iwr https://get.pnpm.io/install.ps1 -useb | iex

使用包管理器安装

bash 复制代码
# macOS (Homebrew)
brew install pnpm

# Linux (使用包管理器)
# Arch Linux
sudo pacman -S pnpm

# Fedora
sudo dnf install pnpm

# Ubuntu/Debian
sudo apt install pnpm

1.4 pnpm 配置

配置镜像源(加速下载)

bash 复制代码
# 查看当前源
pnpm config get registry

# 设置淘宝镜像源
pnpm config set registry https://registry.npmmirror.com/

# 设置华为云镜像
pnpm config set registry https://repo.huaweicloud.com/repository/npm/

# 设置腾讯云镜像
pnpm config set registry https://mirrors.cloud.tencent.com/npm/

# 设置官方源
pnpm config set registry https://registry.npmjs.org/

常用配置

bash 复制代码
# 设置全局安装路径
pnpm config set global-dir ~/.pnpm-global

# 设置并发数(默认16)
pnpm config set fetch-concurrency 8

# 设置网络超时
pnpm config set network-timeout 60000

# 查看所有配置
pnpm config list

二、pnpm 包管理命令📦

2.1 安装依赖包

配置项 简要说明
--save-prod、-P、-p 生产依赖包,常用于项目必备依赖
--save-dev、-D、-d 开发依赖包,常用于项目构建、测试等场景
--global、-g 全局安装软件包
--save-peer 常用于项目插件、库模式等场景;不可省略
命令 简要说明
pnpm install 用于安装项目的所有依赖项
pnpm add <package-name> 安装生产依赖,自动保存到 dependencies
pnpm add -D <package-name> 添加开发依赖,添加到 devDependencies
pnpm add -g <package-name> 添加全局包
pnpm add <package-name>@<version> 安装指定版本
bash 复制代码
# 安装 axios 默认添加至 dependencies
pnpm install axios
# 安装 axios 并将 axios 添加至 devDependencies
pnpm add axios --save-dev

2.2 更新依赖

命令 简要说明
pnpm update 更新所有依赖项,遵守 package.json 中指定的范围
pnpm update <package-name> 更新指定包到最新版本
pnpm update --latest 将所有依赖项更新到最新版本,忽略 package.json 中的版本范围
pnpm upgrade <package-name> --global 更新全局包

注意:pnpm不会自动下载依赖中使用的其他依赖,这涉及到依赖链的问题,pnpm 会先检查共享存储库,如果有该依赖则创建符号链接(即硬链接)定位到共享存储库中的依赖,不会重复的去下载。

2.3 删除依赖

命令 简要说明
pnpm remove <package-name> 移除依赖并自动更新 package.json
pnpm remove <package-name> --global 移除全局包

2.4 查看依赖

命令 简要说明
pnpm outdated 查看过期依赖
pnpm list 查看依赖树
pnpm list --depth 2 指定深度
只显示生产依赖 只显示生产依赖
pnpm list -g 查看全局包

三、脚本执行🏗️

3.1 运行脚本

bash 复制代码
# 运行 package.json 中定义的脚本
pnpm run <script-name>

# 一些常见的简写
pnpm start
pnpm test
pnpm build

四、高级功能🚀

4.1 缓存管理

bash 复制代码
# 查看存储状态
pnpm store status

# 清理未使用的包
pnpm store prune

# 查看存储位置
pnpm store path

4.2 性能优化

pnpm install 用于安装项目的所有依赖项,如下图所示。

image

bash 复制代码
# 使用离线模式(如果已缓存)
pnpm install --offline

# 跳过锁文件生成(用于 CI/CD)
pnpm install --no-lockfile

# 预安装(下载但不链接)
pnpm fetch

4.3 安全检查

bash 复制代码
# 审计依赖漏洞
pnpm audit

# 修复漏洞
pnpm audit fix

# 检查许可证
pnpm licenses list

五、总结

  pnpm 通过底层存储机制的革新,为 JavaScript 开发者带来了更快的安装速度、更小的磁盘占用和更严格的依赖安全。其带来的不仅是性能提升,更是开发范式的进化,实现了对传统包管理工具的降维打击,标志着包管理工具从"依赖下载器"向"依赖运行时"的范式转变。

相关推荐
AskHarries3 分钟前
系统提示词、开发者指令和用户输入的优先级
java·前端·数据库
Moment17 分钟前
长上下文会最终杀死 Rag 吗?
前端·javascript·后端
qcx231 小时前
【系统学AI】25 论文导读 ①:两篇改变 AI 的开山之作——Attention Is All You Need & ReAct
前端·人工智能·react.js·transformer
kyriewen2 小时前
大文件上传最全指南:分片、断点续传、秒传,一篇就够了
前端·javascript·面试
郑洁文2 小时前
基于Python的Web命令执行漏洞自动化检测系统
前端·python·网络安全·自动化
新酱爱学习3 小时前
手搓 10 个 Skill 后,我把重复劳动收敛成了一套零依赖 CLI 工具
前端·javascript·人工智能
IT_陈寒3 小时前
Python的线程池居然把我坑在了垃圾回收这块
前端·人工智能·后端
研☆香3 小时前
es6新特性功能介绍(一)
前端·ecmascript·es6
陈_杨4 小时前
鸿蒙开发-疾阅App阅读训练功能技术解析
前端·javascript