✂️
pnpmやaubeの古くなったoverridesを検出・削除する「pnpm-override-prune」
脆弱性対応などで、依存パッケージの最低バージョンをpackage.jsonのoverridesに定義した場合、時が経って不要になったら削除したくなりませんか。
そんなときのために、古くなったバージョン定義を検出・削除できるツール「pnpm-override-prune」を作りました。
以下、使い方のご紹介です。
検出
Prismaに、ちょうどよい例があったので題材にしてみます。
$ git clone https://github.com/prisma/prisma.git
$ cd prisma
$ pnpm dlx pnpm-override-prune
=== package.json:pnpm.overrides (10 entries) ===
[PRUNE] form-data >=4.0.4 4.0.5
[KEEP] hono >=4.12.14 4.11.7
[KEEP] @hono/node-server >=1.19.13 1.19.0
[KEEP] jws >=4.0.1 3.2.3
[PRUNE] tar-fs >=2.1.4 2.1.4
[PRUNE] lodash >=4.17.23 4.17.23
[KEEP] @tootallnate/once >=3.0.1 1.1.2
[SKIP] ajv@^8.0.0 >=8.18.0 (versioned key)
[SKIP] @azure/core-rest-pipeline@^1.0.0 >=1.14.0 (versioned key)
[SKIP] @azure/msal-node>uuid >=14.0.0 (nested key)
Run with --fix to prune entries marked [PRUNE].
[PRUNE] となったバージョン指定 (form-data >=4.0.4, tar-fs >=2.1.4, lodash >=4.17.23) は、いずれも推移的依存関係ツリーの更新により、もう書く必要がない状況です。
たとえば form-data >=4.0.4 の右側に表示されている 4.0.5 は、この指定を外した場合にインストールされるバージョンを示しています。
削除
不要になったバージョン指定は、--fix を付けることで削除できます。
$ pnpm dlx pnpm-override-prune --fix
=== package.json:pnpm.overrides (10 entries) ===
[PRUNE] form-data >=4.0.4 4.0.5
[KEEP] hono >=4.12.14 4.11.7
[KEEP] @hono/node-server >=1.19.13 1.19.0
[KEEP] jws >=4.0.1 3.2.3
[PRUNE] tar-fs >=2.1.4 2.1.4
[PRUNE] lodash >=4.17.23 4.17.23
[KEEP] @tootallnate/once >=3.0.1 1.1.2
[SKIP] ajv@^8.0.0 >=8.18.0 (versioned key)
[SKIP] @azure/core-rest-pipeline@^1.0.0 >=1.14.0 (versioned key)
[SKIP] @azure/msal-node>uuid >=14.0.0 (nested key)
Pruned 3 entries.
$ git diff
diff --git a/package.json b/package.json
index a0fce28..87027f6 100644
--- a/package.json
+++ b/package.json
@@ -161,12 +161,9 @@
],
"pnpm": {
"overrides": {
- "form-data": ">=4.0.4",
"hono": ">=4.12.14",
"@hono/node-server": ">=1.19.13",
"jws": ">=4.0.1",
- "tar-fs": ">=2.1.4",
- "lodash": ">=4.17.23",
"@tootallnate/once": ">=3.0.1",
"ajv@^8.0.0": ">=8.18.0",
"@azure/core-rest-pipeline@^1.0.0": ">=1.14.0",
おわりに
サプライチェーン攻撃対策の一環でオーバーライドしたものの、いつ消せばよいかモヤモヤしている方は、ぜひお試しください。
Pythonのuv向けに、兄弟ツールの「uv-override-prune」もあります。
Discussion