pnpm 11.9

577文字
3分
編集

pnpm 11.9 がリリースされた。オンデマンドで tarball を生成するレジストリでは、メタデータに integrity が無い場合でもダウンロードした tarball から checksum を計算し lockfile に保存する。--lockfile-only でも必要に応じて tarball を取得して integrity を埋める。integrity が欠けた lockfile エントリは ERR_PNPM_MISSING_TARBALL_INTEGRITY で検証に失敗し、黙って再取得はしない。

pnpm sbom--exclude-peers を追加した。auto-install-peers 有効時に peer が lockfile 上は通常依存と区別しにくいため、peer と peer 経由だけに到達する推移部分木を SBOM から除ける。CycloneDX 1.7 には consumer 提供 peer を表す関係が無いため、除外が仕様上の扱いになる。フラグ名は pnpm list --exclude-peers と揃え、SBOM 側は peer 専用の部分木まで落とす点でより厳しい。

主な変更は次のとおり。

  • 循環を含む lockfile で pnpm audit が遅くなる退行を修正し、到達可能性を Tarjan の強連結成分で一度だけ計算する。パス走査の再帰もやめ、時間・メモリをグラフサイズに比例させた。
  • peer 解決の非決定論を修正し、同一グラフでも optional な推移 peer の有無がインストール順で変わり lockfile が揺れる事象を抑えた。pnpm dedupe --check の間欠失敗にもつながっていた。
  • minimumReleaseAgeExcludetrustPolicyExclude で、同一パッケージの複数 exact-version 行を || 連結 1 行と同等に扱う。pnpm audit --fixaxios@0.18.1 || 0.21.1 のような結合エントリを 1 件ずつ書く。
  • 大規模 monorepo で exact-version のメタデータをメモリキャッシュし、同一パッケージの繰り返し解決時のディスク読み込みを減らした。キャッシュキーにレジストリも含め、同名パッケージの取り違えを防ぐ。
  • pnpr リゾルバのエンドポイントを POST /-/pnpr/v0/resolvePOST /-/pnpr/v0/verify-lockfile に移した。
  • @pnpm/resolving.tarball-url を追加し、pnpmfile のカスタム resolver が proxy の非正規 tarball URL を正規レジストリ URL へ書き換え、lockfile にホスト固有 URL を残さないようにできる。
  • Windows の pnpm dlx でキャッシュパス短縮、EBUSY が元エラーを隠す問題、非リトライ可能な SELF_SIGNED_CERT_IN_CHAIN 等でのハングを修正した。

peer を除いた SBOM を出す例は次のとおり。

bash
pnpm sbom --exclude-peers

pnpm audit --fix が書く minimumReleaseAgeExclude の形式例は次のとおり。

yaml
# pnpm-workspace.yaml
minimumReleaseAgeExclude:
  - axios@0.18.1 || 0.21.1

#参考文献