跳到主要内容
pnpm
文档目录

pnpm shim <cmd>

查看英文原文 ↗

自 v12.0.0-rc.6 起提供(仅 pnpm v12)

管理项目感知的命令 shim

此命令创建的 shim 背后没有全局安装。它的存在只是为了让你所在的项目决定运行什么:pnpm shim add yarn 会链接一个 yarn 命令,运行当前项目所锁定的版本,并按需预置该版本。在一台只有 pnpm 的机器上,正是它让 yarn 在 Yarn 项目里可用。

创建 shim 始终是有意为之,不会作为 pnpm setup 或安装的副作用自动写入,因为 shim 会遮蔽你的 PATH 在此之前解析到的任何内容。

命令

add

pnpm shim add <pkg>...

把每个包的每个 bin 的 shim 链接到全局 bin 目录(pnpm bin -g),并在 globalShims 设置中记录该包,以便这些 shim 真正分发命令。

pnpm shim add yarn

pnpm 预置的包管理器,即 npmyarnbun,无需查找:它们的 bin 事先已知,别名也包括在内(yarnyarnpkgnpmnpx)。对于任何其他包,bin 从该包已发布的清单读取;不发布任何 bin 的包会以 ERR_PNPM_SHIM_NO_BINS 失败。

全局 bin 目录中已存在的某个 bin 属于别的东西,可能是某个全局安装的包,也可能是另一个包的 shim,因此命令会以 ERR_PNPM_SHIM_BIN_CONFLICT 拒绝,而不是拿走一个能用的命令。

在设置了 globalShims: false 时添加 shim 会以 ERR_PNPM_SHIMS_DISABLED 失败:该设置关闭所有项目感知的 shim,否则 shim 会待在 PATH 上什么也不做。

rm

pnpm shim rm <pkg>...

别名: remove, uninstall

移除该包的 shim 以及 add 为其记录的 globalShims 条目

ls

pnpm shim ls

Alias: list

列出全局 bin 目录中的每个 shim 及其适用的策略:

yarn (auto): yarn, yarnpkg

版本如何选择

shim 会从当前工作目录向上查找,解析你所在的项目:

  • 对于包管理器,项目的 packageManagerdevEngines.packageManager 锁定决定版本,并由 pnpm 预置。该锁定优先于全局安装的该包管理器,因为它是项目自己关于由谁安装它的声明。
  • 对于任何其他包,使用项目的 node_modules/.bin/<name>

如果项目中没有任何东西提供该命令,就运行全局安装的版本,shim 绝不会仅仅因为分发未生效就使命令失败。

项目感知全局 bin 的信任规则在这里同样适用:npm 发布的包管理器针对其确切版本用 npm 的签名验证,并无需询问就切换,而 Bun 和 Yarn 6 以校验和锁定的平台归档形式到达,会经过确认提示。该应答按项目和二进制分别记住,所以把项目的锁定改到另一个版本会再次询问。

本页内容译自pnpm 官方文档(MIT License),如有出入以英文原文为准。