pnpm self-update

将 pnpm 更新到最新版本或指定版本。

pnpm self-update [<version>]

用法示例:

pnpm self-update
pnpm self-update 10
pnpm self-update next-10
pnpm self-update 10.6.5

行为#

pnpm self-update 的行为取决于项目上下文:

在一个固定 pnpm 的项目中#

When the project's manifest has a packageManager field set to pnpm (or a devEngines.packageManager entry for pnpm), self-update updates the pinned version in that manifest to the resolved one. In a workspace, this is the workspace root's manifest, even when the command runs in a workspace package. It also installs the resolved version globally, as it does outside a project. The pin is written after the global install, so a failed install leaves the project unchanged.

在项目之外(或当 pnpm pin 被忽略时)#

如果项目没有固定 pnpm,或者通过 pmOnFail: ignore 忽略了固定,则 self-update 会将解析后的 pnpm 版本全局安装,并将其链接到 PNPM_HOME,使其成为系统上活动的 pnpm 二进制文件。

When Homebrew or Corepack manages pnpm#

If Homebrew installed pnpm or Corepack runs it, pnpm self-update leaves the global pnpm alone. In a project that pins pnpm, it still updates the pin. Outside such a project, it fails. Update a Homebrew install with brew upgrade pnpm (or brew upgrade pnpm@11 for a versioned formula).

项目设置被忽略#

自 v11.18.0 版本起,pnpm self-update 不再受其运行所在项目的配置影响:

  • pnpm 是通过切换 pnpm 版本时所使用的同一个受信任的注册源和认证配置来获取的,因此项目的 .npmrc 或 pnpm-workspace.yaml 无法重定向下载或为其附加凭证,且项目默认的 .pnpmfile.(c|m)js 也不会被加载。来自受信任来源的 pnpmfile(即 pnpmfile 设置、全局 pnpmfile 以及配置中的依赖项)仍然适用。
  • 该项目的 minimumReleaseAge、trustPolicy 和 ci 设置不会影响 self-update。它们仍然控制着项目自身的依赖项;对于 self-update 命令,这些值来源于内置默认设置、全局配置、PNPM_CONFIG_* 环境变量或命令行标志。这可以防止仓库跳过“发布时长冷却期”或通过提高版本要求迫使你继续使用过时的 pnpm,也能防止削弱针对 pnpm 下载的信任检查机制。

当 self-update 拒绝更新至低于 minimumReleaseAge 阈值的版本时,交互式运行会提示是否仍要更新;而非交互式运行则仍会失败。 CI 绝不会弹出提示,即使是在挂载了 TTY 的运行器上也是如此。

Installing pnpm v12#

Since v11.10.0, pnpm self-update (and packageManager version-switching) can install and link pnpm v12. It is published under both the pnpm and @pnpm/exe names on the latest-12 dist-tag:

pnpm self-update latest-12

v12 版本以 @pnpm/exe. - 包的形式发布原生二进制文件,pnpm 的内置安装程序会直接链接这些文件。由于不再使用 Node.js 启动器,该命令无需承担 Node.js 启动开销。从 v12 版本开始,安装过程将统一指向无作用域的 pnpm 包(即 Rust 可执行文件),即使是从单可执行文件格式的 @pnpm/exe 构建版本进行更新也是如此。