跳到主内容

pnpm 11.9

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

pnpm 11.9 针对无法发布校验和的注册源计算缺失的 tarball 完整性哈希值,新增 pnpm sbom --exclude-peers 选项,优化了包含循环依赖的锁文件的审计性能,修复了对等依赖解析的不确定性问题,并收紧了 minimumReleaseAgetrustPolicy 的排除逻辑。

次要更改

针对生成的注册源 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 的缓存路径,从而降低了深层依赖树超出 Windows MAX_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.yamlallowBuilds 映射的问题 (#12469)。
  • 修复了 minimumReleaseAgeExcludetrustPolicyExclude,使得针对同一包的多个精确版本条目能够像单个 || 逻辑或条目那样生效 (#12463)。
  • 在精确版本磁盘快速路径上预填充了内存中的包元数据缓存,从而避免了在大型单体仓库安装过程中重复读取磁盘。 缓存键现在包含了注册源信息,因此来自不同注册源的同名包不共享缓存的元数据。
  • 修复了当被修补的依赖项解析为托管于 Git 的单一版本时,pnpm patch 丢失包名并泄露内部选项字段的问题。
  • 将 pnpr 解析器端点移至保留的 /-/pnpr 命名空间下:POST /v1/resolve 现变更为 POST /-/pnpr/v0/resolvePOST /v1/verify-lockfile 现变更为 POST /-/pnpr/v0/verify-lockfile
  • 移除运行时依赖项时,现在也会一并移除由其生成的对应 devEngines.runtimeengines.runtime 条目。 空白的运行时选择器会被标准化为 latest
  • 当组件的 package.json 中声明了 bugs URL 时,pnpm sbom 现在会生成一个 CycloneDX issue-tracker 类型的外部引用。
  • 新增了 @pnpm/resolving.tarball-url,用于构建和识别规范的 npm tarball URL。 自定义 pnpmfile 解析器可以利用它将代理服务器提供的 tarball URL 重写为规范的注册源 URL,从而避免将特定于主机的 URL 写入锁文件。
  • 锁文件校验不再将注册源元数据获取失败报告为 ERR_PNPM_TARBALL_URL_MISMATCH。 安装过程现因注册源获取错误而终止,且此类错误不再泄露嵌入在注册源 URL 中的 Basic Auth 凭据。