執行環境套件管理器打包器測試執行器程式碼檢查格式化指南參考部落格意見回饋

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 條目。