☰
pnpm 从入门到实战:安装配置、迁移与高频报错排查
2026/10/2 20:50:53 网站建设 项目流程

做前端这几年,包管理器从我最早用的 npm,渐渐换成项目里默认顺手就是 pnpm,中间其实踩了不少坑。很多人第一次听到 pnpm 时会问:npm 不是好好的吗,为什么非要多装一个包管理器?这个问题我一开始也是这么想的,直到真实遇到磁盘占用爆炸、依赖安装慢、项目换环境就跑不起来这些问题,才明白 pnpm 不只是“快一点”,而是把 Node 依赖管理的底层逻辑重新做了一遍。这篇不打算写官方文档式的东西,就按我自己的实操经验,把 pnpm 是什么、怎么装、装完怎么配置、实操里那些高频报错怎么处理,从头到尾捋一遍,希望对正在折腾 pnpm 安装和迁移的朋友有点帮助。不管你是刚入门的前端新手,还是被 npm install 折磨过的老手,这篇文章都可以拿来当一份排查手册用。

1. 为什么大家都在把 npm 换成 pnpm:它到底解决了什么

1.1 非扁平化 node_modules,不只是省空间

要理解 pnpm,先得知道 npm 和 yarn 传统安装方式的问题。npm 在安装依赖时会做依赖提升,把所有包都尽量拍平放在 node_modules 顶层。举个例子,你项目里只安装了 A,A 依赖了 B,npm 会把 A 和 B 都平铺在 node_modules 下面。这在当时是为了兼容 Windows 上过长的文件路径,却带来了一个很隐蔽的问题:幽灵依赖。

啥叫幽灵依赖?就是你明明没有在 package.json 里声明 B,但代码里直接 require('B') 居然能跑通。因为 B 被 npm 拍平到了顶层,Node 找模块时顺着 node_modules 往上找,直接命中。问题在于,哪天 A 升级了不再依赖 B,或者 B 在新版本里变成了间接依赖嵌套在下一层,你的代码当场就报 Module not found。这种问题在开发机上报得少,因为 node_modules 早就生成好了;一旦换台机器重新 install,同样一份代码突然就炸了,排查起来十分痛苦。

pnpm 用另一种思路解决了这个问题:node_modules 不再是一锅乱炖,而是拍平不存在的。顶层 node_modules 里只有你 package.json 中直接声明过的依赖,其余传递依赖都被放进了 node_modules/.pnpm 目录里,通过符号链接按需暴露给上一级。换句话说,你的代码能用到的包,必须是你明确装过的;没声明过的东西,在 pnpm 下面连摸都摸不到。我第一次把老项目切到 pnpm 时,第一件事就是抓出一堆以前靠 npm 拍平偷偷使用的“黑户依赖”,补进 package.json 里。这个行为不是麻烦,而是在给项目做一次健康检查。

1.2 全局 store 加硬链接:同一个依赖只下载一次

pnpm 最出圈的卖点是省磁盘空间,它的实现原理是全局内容寻址存储(Content-Addressable Store)。简单说,pnpm 在全局维护了一个依赖仓库,不管你在多少个项目里用同一个版本的 lodash,这个 lodash 的真实文件在全盘只保留一份,后续所有项目通过硬链接把它“借”过来放进自己的 node_modules 里。

可以用生活里的例子理解:家常备一个大书架,整个小区的人借书都在这个书架上取,每个人家里只放一个贴了标签的空书壳,要看的时候顺着索引去书架上拿就行。npm 的做法是每家每户都复印一整本书,100 户人家就是 100 份复印件,书贵、占地方、复制还慢。pnpm 的硬链接不是文件复制,而是文件系统层面的指针,所以实际项目中 10 个前端项目、每份 node_modules 名义上占 2GB,真正落到磁盘上的可能只有 600MB 真实数据,省下的不只是硬盘空间,还有安装时间——因为同一个文件根本不需要重复下载和重复解压。

要注意的是,硬链接机制依赖文件系统支持。Windows 上正常使用 NTFS 没问题,但如果项目放在 FAT32 的 U 盘或某些云盘挂载目录里,pnpm 会退化成复制模式,虽然功能正常但省空间的效果会打折。另外硬链接不能跨分区,所以 store 目录和项目目录尽量放在同一个盘符下,否则又变成了复制。

1.3 安装速度快,还有一个被低估的安全性收益

pnpm 安装快,本质上是“能复用就复用”的机制在起作用。只要全局 store 里已经有这个包,pnpm 做的事情只是“链接”而不是“下载+解压”。这带来的体验提升非常直观:老项目每次 install 都要重新跑一遍全量下载,pnpm 却在几秒内完成,因为 90% 的依赖早就躺在 store 里了。

很多人忽略的是,pnpm 对依赖构建脚本的态度更保守。npm 在安装依赖时默认会执行包里的 postinstall 脚本,这些脚本是供应链攻击的重点目标——恶意依赖可以通过安装脚本在你机器上执行任意命令。pnpm 从很早的版本开始就通过 ignore-scripts 的配置思路,尽量避免自动执行未经确认的构建脚本;新版 pnpm 里更是默认只信任白名单内的依赖去执行构建,白名单外的一律需要你主动 approve。这两年在开源生态里出现过多次通过包名抢注、postinstall 挂马的事件,用 pnpm 之后我被要求“手动确认哪些包需要跑构建脚本”的次数变多了,但说实话,这个过程反而让我更清楚项目里到底哪些依赖在里面搞小动作。

2. 安装 pnpm 的几种方式,选对才不给自己挖坑

2.1 先看一张安装方式对比表

pnpm 的安装不像某些单文件工具那么无脑,不同方式对应不同应用场景,选得不对后面会遇到各种莫名其妙的报错。我理了一张表格,先对照着看你适合哪种:

安装方式大致命令适用场景常见坑
npm 全局安装npm install -g pnpm已有 Node 环境,追求快速上手npm 本身损坏、权限不足、registry 私有源没同步 pnpm 包
独立脚本安装curl -fsSL https://get.pnpm.io/install.sh | shmacOS / Linux 推荐,更新方便安装脚本依赖网络下载 standalone 二进制,内网经常失败
Corepack 安装corepack enable && corepack prepare pnpm@latest --activateNode 官方推荐,适合团队统一版本需要网络下载;Node 16.13 以下没有内置
手动二进制包从 GitHub Releases 下载压缩包解压离线环境,批量分发需要自己配置 PATH,Windows 下容易选错 CPU 架构

我个人现在的主力选择是独立脚本安装,原因有两个:第一,它不依赖 npm,修好之后不会受 npm 全局目录权限问题影响;第二,它自带pnpm self-update,后续升级非常省事。但如果你所在公司的 npm 源已经是稳定的内网私有源,且源上已经同步了 pnpm 包,那用 npm 全局安装也是完全没问题的。

2.2 npm install -g pnpm 报错的常见原因

热搜词里“npm install -g pnpm报错”出现得很频繁,而且报错形式五花八门,其实归纳下来就四类:权限、registry、Node 版本、缓存。

权限问题是最典型的。在 Linux/macOS 上经常看到EACCES: permission denied,这是 npm 全局目录不可写导致的。用 Vue 或者老教程里教的sudo npm install -g pnpm确实能装上,但会给以后埋雷,因为 sudo 安装的全局包归属 root 用户,后续自己运行pnpm self-update或者npm rm -g pnpm都会遇到权限障碍。正确的做法是给 npm 配一个用户级全局目录,我自己的做法是:

mkdir -p ~/.npm-global npm config set prefix ~/.npm-global

然后把~/.npm-global/bin加进 PATH,再重开终端执行npm install -g pnpm,权限问题直接从根源解决。

registry 问题也常见。如果你配过淘宝源或者公司私有源,而这个源上没有同步 pnpm 包,npm 就会报404 Not Found。先用npm config get registry看一眼当前源,再换回官方源或者确认源里有 pnpm 的 metadata。还有一种是 Node 版本太低,新版 pnpm 对 Node 版本有明确下限要求,安装前先node -v确认一下,如果比较老,优先升级 Node 而不是装旧版 pnpm 凑合。

最后是缓存损坏。npm 的本地缓存偶尔会出现状态错乱,表现就是同一个包反复下载失败、校验不通过。遇到这种情况,npm cache verify清理校验一次再重试会比较稳。

2.3 独立脚本安装和 Corepack 的细节

独立脚本安装的命令在 macOS/Linux 上是一行:

curl -fsSL https://get.pnpm.io/install.sh | sh

这个脚本会下载 pnpm 的 standalone 二进制,默认安装到~/.local/share/pnpm,然后把可执行文件软链到 PATH 能找到的目录。安装完重新打开终端输入pnpm -v就能看到版本号。Windows 用户在 PowerShell 里运行一行:

iwr https://get.pnpm.io/install.sh -useb | iex

但 Windows 下独立安装有个注意点:脚本会把安装目录写入用户环境的 PATH,如果你用的终端之前没刷新环境变量,需要重开终端或者手动刷新。还有一点,独立脚本安装的 pnpm 默认自带 Node 运行时,它根本不依赖你系统里的 Node——这在某些场景下是优点,但也会造成“pnpm 能跑,pnpm 装的依赖却找不到 Node”的错觉。实际项目里如果用独立安装的 pnpm 去运行pnpm dev,它还是会去找 PATH 里的 node,所以系统 Node 还是要装好的。

Corepack 是 Node 官方提供的工具,Node 16.13+ 才内置。它的用法是:

corepack enable corepack prepare pnpm@latest --activate

启用之后,pnpm 的版本会跟随项目里的packageManager字段自动切换。比如 package.json 里写了:

{ "packageManager": "pnpm@9.7.0" }

Corepack 就会自动用 9.7.0 版本执行命令。这个机制对团队协作非常友好,能避免十个人十种 pnpm 版本导致的 lockfile 冲突。我一般在公司团队项目里建议用 Corepack,因为新人 clone 仓库下来跑两条命令就完全对齐了;个人项目图省事就直接独立脚本安装。

2.4 删除 pnpm 的完整姿势

别看删除是个小事,知乎和热搜里“删除pnpm”能上榜,说明大家都被“删不干净”坑过。pnpm 不在项目里产生一个单独的卸载命令,删除它要分情况处理。

如果你是用 npm 全局安装的,直接npm rm -g pnpm就卸掉了主程序。但注意 pnpm 的数据不会跟着删除,包括全局 store(缓存目录)、临时文件、日志等。store 目录默认在 Linux/macOS 的~/.local/share/pnpm/store,Windows 在%LOCALAPPDATA%\pnpm\store附近。如果你想彻底清掉磁盘占用,手动删掉这些目录。

如果你是独立脚本安装的,卸载更简单:直接删除安装目录。我推荐用下面这个思路清理干净,而不是只删一个可执行文件:

# 先找到 pnpm 真实路径 which pnpm # 删除安装目录(注意替换成你机器上实际的路径) rm -rf ~/.local/share/pnpm # 一并清理 store rm -rf ~/.local/share/pnpm/store # 检查 ~/.npmrc 里有无 pnpm 相关配置残留 cat ~/.npmrc

Windows 上除了删除安装目录,还要去检查用户环境变量里有没有残留的PNPM_HOME或 PATH 条目。很多人重装 pnpm 后出现奇怪的“ shim 指回自身”报错,其实就是旧安装目录没删干净、多个版本残留互相干扰导致的。所以我的忠告是:如果只是想重装 pnpm,先把它卸干净,尤其是 PATH 和环境变量里那些旧路径,不然新装的根本不会生效。

3. 实操:从一个空目录开始,完成 pnpm 配置、迁移与私有库链接

3.1 验证安装与配置 registry

安装 pnpm 后,第一步永远是验证版本和 Node 环境:

node -v pnpm -v

接下来我强烈建议先把 registry 和网络参数配置好,否则后面pnpm add很可能被网络问题打趴下。pnpm 的配置读取方式和 npm 基本一样,支持项目级.npmrc、用户级~/.npmrc和命令行参数。配置 registry 的命令:

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

这里顺带解释一下为什么很多人推荐 npmmirror(也就是大家常说的淘宝源):它是国内同步 npm 官方包频率较高的镜像,普通依赖基本都能命中,安装速度和稳定性都比直连官方源好很多。如果你公司有内网私有源,优先配私有源,因为私有源除了快还能保证提供公司内部包。真实场景里我见过不少人在.npmrc里把 registry 配错成不存在的路径,导致 pnpm 下载直接 404,这个用pnpm config get registry一查便知。

除了 registry,我建议顺手把网络超时和重试参数也加上。把这些写进.npmrc是一个常规操作:

registry=https://registry.npmmirror.com network-timeout=60000 fetch-retries=5 fetch-retry-maxtimeout=60000

network-timeout=60000的意思是单次网络请求最长等 60 秒,fetch-retries=5是失败自动重试 5 次。这样设置是因为 pnpm 采用的并发下载模型有时会在网络波动时过早超时,放宽超时和重试次数之后,大部分“下载失败”都能自动恢复。

3.2 初始化项目与高频命令速查

配置完源之后,就可以正式走进 pnpm 的工作流了。在一个空目录里执行:

pnpm init

会生成 package.json。接着安装依赖:

# 安装 package.json 里的所有依赖 pnpm install # 添加某个依赖(生产依赖) pnpm add lodash # 添加开发依赖 pnpm add -D typescript # 全局安装某个工具 pnpm add -g taze

运行脚本的命令是pnpm run dev,也可以简写成pnpm dev。这对从 npm 过来的人没什么学习成本,但有几个命令是 npm 没有的,用习惯了真的回不去:

  • pnpm dlx:相当于 npx,临时执行某个包而不安装到本地。比如pnpm dlx create-vite创建新项目。
  • pnpm exec:在当前项目环境下执行二进制命令,比如pnpm exec vite build,内部依赖都能被搜到。
  • pnpm why <包名>:查这个依赖为什么存在、谁引用了它。排查幽灵依赖和冗余依赖的好帮手。
  • pnpm up:按 package.json 声明的范围升级依赖,pnpm up --latest则直接升级到最新版。
  • pnpm store prune:清理 store 中没有任何项目引用的孤立包。

这里提醒一个容易踩的坑:pnpm add默认安装到 dependencies,而-D代表 devDependencies,-O是 optionalDependencies,装错了位置影响的是生产环境构建时的依赖体积。我在评审代码时经常看到有人把构建工具装进了 dependencies,用 pnpm 之后因为命令提示明确,这种情况反而变少了。

3.3 从 npm / yarn 项目迁移到 pnpm

老项目切 pnpm,最核心的问题是 lockfile 和 node_modules 的转换。标准流程是这样的:

  1. 把旧的package-lock.json或yarn.lock删除(建议先备份)。
  2. 删除旧的node_modules,避免新旧结构混在一起。
  3. 执行pnpm install,让它重新生成pnpm-lock.yaml。

有些从 npm 迁移的教程会让你用pnpm import把 package-lock.json 转换成 pnpm-lock.yaml,这样能尽量保留锁定版本,减少依赖解析的意外。但我的实际经验是,import 之后往往还要手动处理一些版本冲突,不如直接在 package.json 里保持原来的^或~范围,重新解析一次反而干净。当然如果你非常在意依赖的精确版本,pnpm import可以先跑一次试试。

迁移过程最常见的报错是“某个包找不到”。这基本就是我前面说的幽灵依赖问题:以前 npm 把传递依赖平铺在顶层,你的代码或某个库可能偷偷依赖了一个 package.json 里没声明的包。pnpm 的严格结构让它原形毕露了。解决办法不是退回 npm,而是把这个缺失的依赖手动补进 package.json。这个过程虽然烦,但每补一个,项目的健壮性就增强一分。

3.4 项目里“必须用 pnpm”的秘密:workspace 和 link 协议

我在折腾开源项目时遇到不少 README 里直接写明“要求使用 pnpm”的仓库,比如像是在依赖 monorepo 场景下用 pnpm workspace 组织的项目,这类项目的 package.json scripts 里通常大量使用pnpm --filter这种 workspace 命令。它们为什么讲得这么绝对?一个关键原因是项目里普遍用了workspace:协议来引用本地包。

给你看一个最小化的 pnpm workspace 配置,文件叫pnpm-workspace.yaml,放在项目根目录:

packages: - "packages/*"

假设packages/lib-a是本地私有库,另一个包apps/web想引用它,不需要去 registry 拉取,直接声明:

{ "dependencies": { "@my/lib-a": "workspace:*" } }

这表示依赖来自当前 workspace 里的本地包,而不是远程 registry。这种协议 npm 和 yarn 是不认的,所以项目文档才会强制你使用 pnpm。如果你非要用 npm 去装这些项目,十有八九会装上远程上的同名旧版本,或者直接解析失败。

然后是热搜词里提到的pnpm link,它解决的是“本地项目链接本地私有库”的问题。有两个层次:

第一层,直接把本地库链接到当前项目且保持实时更新。比如你的私有库在/path/to/private-lib,在项目目录里执行:

pnpm add link:/path/to/private-lib

这样项目 node_modules 里就会把这个私有库软链进来,私有库代码一改,项目里立刻生效,非常适合开发调试阶段。

第二层,通过全局链接中转。先在私有库目录里执行:

pnpm link --global

这会把这个库注册到全局。然后在目标项目里执行:

pnpm link private-lib-name

就把目标项目里的依赖指向了全局注册的私有库。这种方式适合机器上同时维护多个项目、都依赖同一个本地库的场景。要注意的是,pnpm link因为是符号链接,被链接的库本身不能包含绝对路径的 file 依赖,否则链接过去之后可能解析不到。

真正生产项目里,我建议少用散落的pnpm link,而是把本地库纳入 workspace,用workspace:协议统一管理。这样包与包之间的关系在仓库内是自解释的,任何人 clone 下来执行一次pnpm install就能完全复现,不需要手动 link 任何东西。pnpm link更多是临时调试和本地私有库快速联调时的应急手段。

4. 常见报错速查和离线环境安装实录

4.1 高频报错排查表

把热词里出现过的、以及我实际遇到过的问题整理成了一张速查表,碰到类似报错可以先按表里的思路走一遍:

报错现象核心原因解决路径
pnpm : 无法将“pnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称pnpm 未安装成功或 PATH 里找不到可执行文件重开终端;检查安装目录是否在 PATH;确认安装过程没有中断
'pnpm' 不是内部或外部命令,也不是可运行的程序或批处理文件同上,cmd 环境下 PATH 没生效把 pnpm 安装目录加入系统 PATH,重开命令行
pnpm: 无法识别伴随着执行策略报错PowerShell 执行策略限制用管理员身份执行Set-ExecutionPolicy -Scope CurrentUser RemoteSigned,或者直接调用pnpm.cmd
pnpm: the global target of the pnpm shim points back at the shim多次安装产生 shim 残留,可执行文件指向自身彻底卸载旧安装目录,清理 PATH 和相关环境变量,重新用独立脚本安装
npm install -g pnpm报 EACCESnpm 全局目录权限不足配置用户级 prefix,避免 sudo
npm install -g pnpm报 404registry 源上没有 pnpm 包换回官方源或确认私有源同步状态
Running pnpm install时某个依赖一直下载失败网络超时、镜像不稳定、依赖版本不存在换 registry、调大network-timeout、增加fetch-retries,必要时清缓存
迁移 pnpm 后报 Module not found幽灵依赖暴露,代码使用了未声明的包把缺失包补进 package.json
pnpm install 后被要求 approve 构建脚本新版 pnpm 默认不执行依赖构建脚本用pnpm approve-builds或配置onlyBuiltDependencies放行可信依赖

关于pnpm shim points back at the shim这条,我多说一句。它的典型出现场景是在 Windows 上先通过 npm 全局安装过 pnpm,后来又用独立脚本安装覆盖了一次,两个安装点互相串台,导致 pnpm 的可执行 shim 被错误地指回了自身。我第一次遇到时一脸懵,后来排查发现 PATH 里同时存在 npm 全局目录和独立安装目录,两个目录里都有 pnpm 相关文件,互相干扰。解决思路很直接:把两个来源都卸掉,清理掉 PATH 里重复的 pnpm 路径,只保留一个安装方式重装。这类问题在我用独立脚本安装之后几乎绝迹了。

4.2 pnpm 离线安装的几种可靠做法

热搜词里有“pnpm离线安装”“pnpm离线安装包”,说明很多人面对的是内网或离线开发环境。pnpm 离线安装其实分两件事:一是 pnpm 工具本身的离线安装,二是项目依赖的离线安装。

pnpm 工具本身离线安装,最稳的办法是“在有网条件下把 pnpm 打包带走”。以用 npm 方式为例:

在有网的机器上执行:

npm pack pnpm

会生成一个类似pnpm-9.7.0.tgz的文件,把它拷贝到离线机器上,然后执行:

npm install -g ./pnpm-9.7.0.tgz

只要离线机器上有 Node 和 npm 就能装,不依赖网络。装完后验证pnpm -v。

另一种方式是直接从 GitHub Releases 下载 standalone 压缩包。以 Windows 为例,下载pnpm-win32-x64.zip,解压后会得到pnpm.exe,把它放到一个固定目录(比如C:\pnpm),再把该目录加进 PATH,pnpm -v就通了。Linux 类似,下载pnpm-linuxstatic-x64(注意不是普通动态链接版,动态链接版可能依赖系统库),放到/usr/local/bin并加执行权限。

项目依赖的离线安装稍微复杂一点,等于是要把“已经下载过的依赖仓库”整体迁移过去。做法是:在有网的机器上先正常执行pnpm install把项目装好,然后找到 store 路径,用pnpm store path查看。把整个项目目录连同 store 目录一起拷到离线机器,保持项目里的.npmrc配置:

store-dir=/path/to/copied/store

之后在离线机器上执行:

pnpm install --offline

--offline让 pnpm 只从本地 store 解析依赖,只要 store 里已经存在项目需要的所有包,整个过程不需要网络。这里有个踩过的坑:硬链接不能跨盘符,如果项目在 C 盘而 store 拷贝到了 D 盘,pnpm 会退化成复制模式,安装时间会变长但功能正常;如果项目在网盘或 FAT32 文件系统上,硬链接可能直接失败,所以离线迁移时尽量减少跨盘符操作。

还有一点必须说清楚:离线安装不是万能的。如果之后你需要往项目里新增一个 store 里没有的第三方包,一样需要网络或者一个内网私有 registry。所以长期离线开发的团队,还是建议搭建一个内网源,平时有网机器把包全部缓存到内网源里,离线机器全部指向内网源。

4.3 怎么判断一个项目是不是必须用 pnpm

最后回应一下热搜词里反复出现的“openmaic必须要用pnpm吗”这类问题。我遇到过不少开源项目的安装文档开头第一行就写着“这个仓库必须使用 pnpm”,以前我会觉得这是在强迫用户,后来看多了才明白,凡是这样写的仓库,十有八九用到了 pnpm 独有的机制。

一般来说,下面这些信号出现任何一个,都意味着你不应该用 npm 或 yarn 硬装:

第一,仓库里有pnpm-workspace.yaml文件。这表明项目使用了 workspace 管理多个子包,包与包之间通过workspace:*协议互相引用,npm 解析不了这种协议。

第二,项目根目录下只有pnpm-lock.yaml。pnpm 的锁文件格式和 npm 的 package-lock.json 完全不同,npm 装出来会生成自己格式的锁文件,两份锁文件并存会导致依赖解析结果混乱。

第三,package.json 的 scripts 里大量出现pnpm --filter或pnpm -r这类 workspace 专属命令。这些命令在 npm 里根本不存在,装了也没法执行。

碰到这种情况,我给你的建议很简单:按文档要求装好 pnpm 再继续,不要和项目的构建体系硬刚。如果只是临时想在一个 require pnpm 的项目里小改一下、又不愿意全局装 pnpm,可以临时用npx pnpm install顶上,但注意别让它生成多余的锁文件或者把声明好的 pnpm-lock.yaml 弄丢。我从这些项目的切换中最大的体会是:pnpm 的 workspace 加严格依赖结构,本身就是大型前端工程的一剂良药,它强迫项目把每一个被依赖的包都明明白白写清楚,短期看是增加了迁移成本,长期看省掉的是无穷无尽的“换环境就挂”的排查时间。

另外提一个我在实操里常用来加速排错的手段:遇到 pnpm 报错时,先用pnpm install --reporter=append-only或者临时加个--loglevel debug看它到底卡在哪一步,是网络下载、依赖解析还是构建脚本。大部分看起来诡异的失败,其实根源都很简单,只是默认输出把关键信息吞了而已。

这篇文章写到这里,我把 pnpm 为什么值得换、怎么装、怎么配置、怎么迁移、怎么排查都过了一遍。说实话,我第一次从 npm 切到 pnpm 时也犹豫过,觉得无非是换个命令,但真正跑起来之后,那种“磁盘占用肉眼可见地变小、安装速度快一大截、项目换环境再也不用战战兢兢”的体验,是很难回头的。最后分享一个小技巧:在团队里推行 pnpm 时,不要直接强制所有人重装,先在packageManager字段里固定好 pnpm 版本并附一句简要说明,再配合一个 shared 的.npmrc把 registry 和超时参数统一掉,大家切换到 pnpm 的阻力会小很多。工具选型这种事,从来不是越新越好,但 pnpm 在“快、省、稳”这三件事上,确实值得你给它一次机会。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询