Skip to content
返回

pnpm 12 最新上手:一条命令升级,顺手干掉 nvm

同一个终端,项目里要 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 的同事。 ⚡


Share this post on:

Next Post
一个AI研究员下车,藏着三个好消息