同一个终端,项目里要 Node 22 就是 22,切出去还是你原来的版本。不用 nvm use,不用装 shell hook,也不用先有 Node 才能装 pnpm——12 是原生二进制,安装顺序反过来了。
一、升级就一条命令
pnpm self-update
没了。
风险为零,收益从第一分钟就开始。
二、装 pnpm 不用先装 Node
以前得先有 Node 才能装 pnpm,全靠 nvm 绕过。现在 pnpm 是原生二进制:
curl -fsSL https://get.pnpm.io/install.sh | sh -
顺序反了——先装 pnpm,再用 pnpm 装 Node:
pnpm rt set node lts -g # 装 LTS
pnpm rt set node 22 -g # 装指定大版本
Windows 用 npx get-pnpm。支持 Linux / macOS / Windows x64+arm64。
这意味着 nvm 已经不需要了。
三、全局 node 会自动跟着项目走
以前的多项目版本地狱:一个仓库要 Node 18,一个要 Node 22,切来切去还得记得 nvm use。
多项目版本地狱的解药:项目里钉了 Node 版本,全局那个 node 命令进去就自动切。
package.json 里写:
{
"devEngines": {
"runtime": { "name": "node", "version": "^22.0.0" }
}
}
或者直接把它作为依赖装进来:
pnpm add node@runtime:22
在项目里 node -v 是 22,出去还是你原来的。同一个终端,不用切。
四、顺手修掉的几个老毛病
1. self-update 不再听项目的
以前项目里的 .npmrc / pnpm-workspace.yaml 能影响这次下载,理论上恶意仓库可以让你把 pnpm 下到别处。现在一律改用全局可信配置。
2. 配置拼错不再静默失效
以前把 minimumReleaseAge 拼错,策略就悄悄没了。现在报 ERR_PNPM_UNRECOGNIZED_WORKSPACE_SETTINGS,还会猜一个正确名字给你。
3. 兼容性数据库清掉了静态分析条目
它真的搞出过事故:@typescript-eslint/types 被塞了个 typescript 依赖,解析到最新版,把 TypeScript 7 装进老版 ESLint 下面,直接崩。
4. sudo 下跑全局命令会被拒
ERR_PNPM_SUDO_NOT_SUPPORTED。以前会静默写进 root 的 home——难怪装完 pnpm 找不到。
5. pnpm init 钉最新版
以前用老 pnpm 生成的项目,会把那份陈旧通过 pin 继承下去。
还有更新功能大家去官网查看。https://pnpm.io/zh/
五、几个会撞上的破坏性变更
Git 依赖不再走 SSH
GitHub / GitLab / Bitbucket 统一按 HTTPS 解析,lockfile 里永远不写 SSH URL。
好处很实在:笔记本上带 SSH key 写的 lockfile,CI 上没 key 也能装。pnpm 11 可能写进 git@github.com:...,然后所有人一起挂。
私仓要 SSH 就自己重写:
git config --global url."git@github.com:".insteadOf https://github.com/
旧 lockfile 里的 SSH 条目 pnpm 不会自动改,跑一次
pnpm update <包名>。
--resolution-only 被删了
CI 脚本里有这个的会直接报错停摆。替代品 pnpm peers check,从 lockfile 读,不用重新解析。
同名 script 会遮住内置命令
package.json 里有 clean / setup / deploy / rebuild,那 pnpm clean 跑的是你的 script。强制走内置:
pnpm pm clean
lockfile 会有一次“看着吓人但没事”的 diff
依赖环切割点固定了,现在同一份代码在哪台机器上都产出字节级一致的 lockfile。代价是第一次重新解析时 peer variant 会被重写一次,diff 很难看,这是预期行为。
六、新命令速查
| 命令 | 用途 |
|---|---|
pnpm rt set node 22 -g |
装运行时 |
pnpm shim add yarn |
让 yarn 跑项目 pin 的版本 |
pnpm pm <cmd> |
强制走内置命令 |
pnpm peers check |
查 peer 依赖问题 |
结语
装 pnpm 不用先有 Node、全局 node 跟着项目走、git config 一行解决 SSH 依赖在 CI 上装不了、self-update 不再听项目的话。
一个前端开发者真正会感知到的升级。
转发给那个还在手动
nvm use的同事。 ⚡