跳到主内容

pnpm 11.5

· 一分钟阅读
Zoltan Kochan
pnpm 的首席维护者

pnpm 11.5 新增了 hoistingLimits 设置,用于控制 nodeLinker: hoisted 模式下依赖项的提升层级;更换了交互式提示库以修复长选项列表中的滚动问题;在信任级别中识别了暂存发布;并针对安装和 dist-tag 进行了多项修复。

次要更改

hoistingLimits 设置

一个新的 hoistingLimits 设置控制使用 nodeLinker: hoisted 时依赖关系的提升距离。 它对应 Yarn 的 nmHoistingLimits,并接受以下参数:

  • none - 尽可能向上提升(默认值)。
  • workspaces - 仅提升至各个工作区包的层级。
  • dependencies - 仅向上提升至各工作区包的直接依赖项。

最初在 #6468 中提出,关闭了 #6457

全新的交互式提示词库

pnpm 将所有交互式提示的实现从 enquirer 替换为了 @inquirer/prompts。 此更改修复了 update -i 命令中长选项列表在终端内被截断的滚动溢出问题 (#6643)。 新库采用了感知视觉行数的分页机制,因此在有大量包可用时,滚动操作能够正常运行。

受影响的命令包括 pnpm update -i(以及 --latest)、pnpm audit --fix -ipnpm approve-buildspnpm patchpnpm patch-removepnpm publishpnpm login,以及 pnpm run / pnpm exec(当配置了 verifyDepsBeforeRun=prompt 时)。

在所有交互式提示中,Vim 风格的 j / k 键仍可用于上下导航。

分阶段发布在信任度量表中获得认可

分阶段发布现已在信任度量标准中得到认可。 当某个包版本的注册表元数据包含 approver 字段时,该字段会被视为最强有力的信任凭证(其优先级高于“受信任发布者”和“来源证明”),因为分阶段发布要求通过双因素认证来批准发布。 这避免了从暂存发布切换到较低信任级别时出现误报的信任降级错误 (#11887)。

补丁更改

  • 修复了在使用别名安装(例如 pnpm i nuxt@npm:nuxt-nightly@5x)时,若依赖树中不同层级的传递依赖包存在相互的对等依赖循环,会导致 pnpm 在解析对等依赖阶段挂起的问题 (#11999)。
  • 修复了针对 npmjs.org 执行 pnpm dist-tag addpnpm dist-tag rm 时,若不加 --otp 就会失败的问题。 pnpm 现已通过现有的基于浏览器的 2FA 流程(即 pnpm publish 所使用的流程)来处理 OTP 验证:浏览器会自动打开,用户完成身份验证后,系统会在重试时设置 dist-tag。 --otp=<code> 继续通过传统流程运作。
  • 修复 npm 解析快速路径中对 minimumReleaseAgeExclude 的处理,确保被排除的包不会被锁定在过旧的版本上。
  • 修复了在安装无关包时,远程(非远程库)https-tarball 依赖项在锁文件条目中的 integrity 字段丢失的问题。 缺失的完整性校验信息可能导致后续使用 --frozen-lockfile 进行的安装操作因 ERR_PNPM_MISSING_TARBALL_INTEGRITY 错误而失败 (#12001)。
  • 当缺少 pnpm-lock.yaml 但存在 node_modules/.pnpm/lock.yaml 且该文件仍符合清单要求时,跳过依赖项重新解析。 pnpm install 现在会复用已物化的快照来重新生成 pnpm-lock.yaml,而不是遍历注册源从头重建 (#11993)。 当 pnpm-lock.yaml 缺失时,--frozen-lockfile 仍然拒绝继续执行。