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 开发者带来了更快的安装速度、更小的磁盘占用和更严格的依赖安全。其带来的不仅是性能提升,更是开发范式的进化,实现了对传统包管理工具的降维打击,标志着包管理工具从"依赖下载器"向"依赖运行时"的范式转变。

相关推荐
橙子家9 小时前
浏览器缓存之【身份与会话管理】:Cookies 和 Private state tokens
前端
最新资讯动态10 小时前
HDC 2026 | 对话鲸鸿动能:存量时代,品牌如何夺回营销“主动权”?
前端
最新资讯动态10 小时前
游戏出海,从产品走向体系
前端
最新资讯动态10 小时前
20人团队跑出百万DAU、大厂也来抢量:谁在鸿蒙生态跑出加速度
前端
最新资讯动态10 小时前
千万开发者背后,鸿蒙商业化的B面
前端
爱勇宝12 小时前
AI 时代:智商决定起点,情商决定走多远
前端·ai编程
kyriewen12 小时前
用了半年 Claude Code 后,我尝试关掉它写了一周代码——结果比想象中严重
前端·javascript·ai编程
IT_陈寒13 小时前
Vite的静态资源打包让我熬夜到三点,这坑千万别跳
前端·人工智能·后端
徐小夕14 小时前
万字拆解 JitWord:企业级实时协同文档底层架构 + 大模型 AI 融合完整实践
前端·vue.js·github
一份执念14 小时前
uni-app 小程序分包限制处理与主包体积优化实战
前端·微信小程序