pnpm 11.9
· 一分钟阅读
pnpm 11.9 针对无法发布校验和的注册源计算缺失的 tarball 完整性哈希值,新增 pnpm sbom --exclude-peers 选项,优化了包含循环依赖的锁文件的审计性能,修复了对等依赖解析的不确定性问题,并收紧了 minimumReleaseAge 和 trustPolicy 的排除逻辑。
次要更改
针对生成的注册源 tarball 的完整性校验
某些注册源会按需生成 tarball,且无法在包元数据中提供完整性校验和。 pnpm 现在会根据下载的 tarball 计算完整性值并将其存储在锁文件中,以便后续安装时能验证该条目。
此机制同样适用于 --lockfile-only:pnpm 会在必要时下载 tarball 以获取并记录其完整性信息。 如果锁文件条目仍缺失完整性信息,lockfile 校验过程将报错 ERR_PNPM_MISSING_TARBALL_INTEGRITY,而不会静默重新获取。
pnpm sbom --exclude-peers
pnpm sbom 现支持 --exclude-peers。 当启用 auto-install-peers 时,对等依赖会被解析并写入锁文件,在 SBOM 中它们看起来与普通依赖无异。 该标志会移除对等依赖以及仅通过这些依赖可达的传递性依赖子树。
该标志名称与 pnpm list --exclude-peers 保持一致;但在 SBOM 中的处理更为严格,因为 CycloneDX 1.7 缺乏一种简洁的方式来表示由消费者提供的对等依赖关系。
补丁更改
pnpm audit --fix现在会针对每个包写入一条合并后的minimumReleaseAgeExclude条目(例如axios@0.18.1 || 0.21.1),以符合文档中规定的设置格式。 现有的按版本条目已合并为统一形式 (#12534)。- 修复了非确定性的对等依赖解析问题。该问题会导致在相同的安装操作中,包的对等依赖后缀里出现可选的传递性对等依赖的增减,进而引发锁文件变动以及
pnpm dedupe --check偶发性失败。 - 修复了 Windows 上
pnpm dlx的不稳定性问题:此前,安装失败后的清理操作可能会导致原始错误被EBUSY错误掩盖。 - 缩短了
pnpm dlx的缓存路径,从而降低了深层依赖树超出 WindowsMAX_PATH限制的可能性。 - 修复了从注册源获取资源时,若发生不可重试的网络错误(如
SELF_SIGNED_CERT_IN_CHAIN),导致pnpm挂起或因未处理的 Promise 拒绝而崩溃的问题。 - 修复了包含循环依赖的锁文件中
pnpm audit的递归性能问题。 可达性现采用 Tarjan 强连通分量算法进行计算,路径遍历不再使用递归,从而确保在包含环的图中保持线性的时间和内存复杂度 (#12212)。 - 修复了可选依赖更新失败时重写无关依赖规范的问题 (#11267)。
- 对于此前未启用
enableGlobalVirtualStore的项目,若现在开启该选项,node_modules/.pnpm/node_modules下过时的提升软链接将被替换 (#9739)。 - 修复了
pnpm install --ignore-workspace覆盖pnpm-workspace.yaml中allowBuilds映射的问题 (#12469)。 - 修复了
minimumReleaseAgeExclude和trustPolicyExclude,使得针对同一包的多个精确版本条目能够像单个||逻辑或条目那样生效 (#12463)。 - 在精确版本磁盘快速路径上预填充了内存中的包元数据缓存,从而避免了在大型单体仓库安装过程中重复读取磁盘。 缓存键现在包含了注册源信息,因此来自不同注册源的同名包不共享缓存的元数据。
- 修复了当被修补的依赖项解析为托管于 Git 的单一版本时,
pnpm patch丢失包名并泄露内部选项字段的问题。 - 将 pnpr 解析器端点移至保留的
/-/pnpr命名空间下:POST /v1/resolve现变更为POST /-/pnpr/v0/resolve,POST /v1/verify-lockfile现变更为POST /-/pnpr/v0/verify-lockfile。 - 移除运行时依赖项时,现在也会一并移除由其生成的对应
devEngines.runtime或engines.runtime条目。 空白的运行时选择器会被标准化为latest。 - 当组件的
package.json中声明了bugsURL 时,pnpm sbom现在会生成一个 CycloneDXissue-tracker类型的外部引用。 - 新增了
@pnpm/resolving.tarball-url,用于构建和识别规范的 npm tarball URL。 自定义pnpmfile解析器可以利用它将代理服务器提供的 tarball URL 重写为规范的注册源 URL,从而避免将特定于主机的 URL 写入锁文件。 - 锁文件校验不再将注册源元数据获取失败报告为
ERR_PNPM_TARBALL_URL_MISMATCH。 安装过程现因注册源获取错误而终止,且此类错误不再泄露嵌入在注册源 URL 中的 Basic Auth 凭据。
