bun dedupe
從 bun.lock 中移除軟體包的重複版本
隨著時間推移,即使某個版本滿足所有版本範圍,bun.lock 中仍可能積累同一軟體包的多個版本。例如,當版本範圍為 ^0.15.7 和 ^0.15.8 時,檔案中可能同時包含 esbuild@0.15.10 和 esbuild@0.15.11。bun dedupe 會將它們合併為最少數量的已鎖定版本(優先選擇較新的版本),儲存 bun.lock 並執行安裝。
terminal
bun dedupe
Code
bun dedupe v1.4.0 (abc12345)
↳ esbuild 0.15.10 → 0.15.11
↳ react 18.2.0 → 18.3.1
2 duplicate versions removed, 3 packages installed (checked 5 packages in bun.lock) [12.00ms]
每一行顯示的是 Bun 移除的版本以及其相依項現在使用的版本。
bun dedupe 只會在 lockfile 中已有的版本之間進行選擇,絕不會修改 package.json。它絕不會從 registry 獲取新版本,也絕不會將相依項移出其版本範圍。如需執行這些操作,請使用 bun update。
--check 和 --dry-run
--check 會報告 Bun 將移除的內容,但不會進行任何更改;如果存在重複版本,則以 1 退出。可在 CI 中使用:
terminal
bun dedupe --check
Code
bun dedupe v1.4.0 (abc12345)
↳ esbuild 0.15.10 → 0.15.11
↳ react 18.2.0 → 18.3.1
2 duplicate versions can be removed (checked 5 packages in bun.lock) [9.00ms]
bun dedupe
--dry-run 會列印相同的輸出,但始終以 0 退出
--lockfile-only 會重寫 bun.lock,但不會執行安裝
注意事項
- Bun 會遵循 overrides 和 catalogs。它會根據每個相依項的有效版本範圍重新指向對應版本。
- 如果這是移除重複版本的唯一方法,Bun 可能會將直接相依項切換到一個_更舊的_已鎖定版本(例如,某個傳遞相依項將其版本固定為一個確切版本)。如果希望優先選擇較新的版本,請使用
bun update或 override。 - Bun 絕不會移除
patchedDependencies中的版本。如果因此必須保留另一個版本,Bun 會列印一行kept …,解釋原因。 - 相依於 dist-tag、git URL 或 tarball 的相依項會保留其解析後的版本。
- 需要 lockfile 與
package.json相匹配。如果自上次安裝以來相依項發生了更改,命令會以bun.lock does not match package.json退出。請先執行bun install。Bun 會自動遷移package-lock.json、yarn.lock或pnpm-lock.yaml。 - 不能與
--frozen-lockfile、--production或--no-save一起使用;請改用--check。 - 使用 isolated linker 時,僅因 peer dependencies 不同而產生的同一版本多個副本不算重複版本,Bun 也不會報告這些副本。
bun prune會清理過時的 store 條目。