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

bun update

將相依項更新到其版本範圍允許的最新版本

bun update(別名 bun up)會將每個直接和傳遞相依更新到其請求範圍允許的最新版本。隨後,它會重寫 package.json 和 bun.lock。若要忽略已宣告的範圍,請使用 --latest。

terminal
bun update

要更新特定的軟體包,請傳入其名稱。名稱可以是 glob 模式,! 用於排除:

terminal
bun update zod
bun update jquery@3            # move the package.json entry to the newest 3.x
bun update '@types/*'
bun update '@babel/*' '!@babel/core'

bun update <package> 會更新 <package> 在 bun.lock 中出現的所有位置,並保持其他內容不變。這同樣適用於傳遞相依——bun update caniuse-lite 會獲取巢狀相依中的修復,而不會將其新增到 package.json。不在 bun.lock 中的名稱會導致錯誤。

更新的軟體包會在安裝摘要中顯示為 ↑ name old → new,當更新範圍之外存在更新的主版本時,會顯示 (v3.0.0 available)。使用 --dry-run 可預覽更新。

package.json 如何被重寫

  • ^1.1.0 → ^1.2.0,~1.1.0 → ~1.1.5。Bun 會保留運算子。使用 install.exact 或 --exact 時,Bun 會寫入精確版本。
  • 精確鎖定版本、dist-tag("latest"、"next")和其他範圍形式(*、1.x、>=1.0.0)會保持原樣;只有 bun.lock 會更新。--latest 會重寫它們。
  • Bun 從不重寫 catalog: 引用;它會改為更新根目錄 package.json 中的 catalog 條目。
  • --no-save 只會更新 node_modules,而不更改 package.json 和 bun.lock。

哪些內容會被保留

  • Bun 從不擴大範圍。相依 foo@^1.0.0 的軟體包永遠不會獲得 foo@2.x。
  • patchedDependencies 中的版本只要仍在其範圍內,就會保持不變。Bun 會將它們報告為 kept name@version (patched, v1.2.3 available)。--latest 和 bun audit fix 會更新它們;之後請使用 bun patch 重新建立補丁。
  • 如果針對某個傳遞相依的軟體包的登錄檔請求失敗,該軟體包會保留其鎖定版本,Bun 會列印警告。針對直接相依的請求失敗則會報錯。

--interactive

使用 --interactive 標誌選擇要更新的軟體包:

terminal
bun update --interactive
bun update -i

--interactive 會開啟一個終端介面,列出所有過時的直接相依。Bun 會更新你選中的軟體包,效果等同於執行 bun update <name> ...;其他軟體包都會保留其鎖定版本。

互動介面

介面顯示按相依型別分組的軟體包:

Text
? Select packages to update - Space to toggle, Enter to confirm, a to select all, n to select none, i to invert, l to toggle latest

  dependencies                Current  Target   Latest
    □ react                   17.0.2   18.2.0   18.3.1
    □ lodash                  4.17.20  4.17.21  4.17.21

  devDependencies             Current  Target   Latest
    □ typescript              4.8.0    5.0.0    5.3.3
    □ @types/node             16.11.7  18.0.0   20.11.5

  optionalDependencies        Current  Target   Latest
    □ some-optional-package   1.0.0    1.1.0    1.2.0

分組說明:

  • 軟體包按節標題分組:dependencies、devDependencies、peerDependencies、optionalDependencies
  • 每組顯示與軟體包資料對齊的列標題

列說明:

  • 軟體包:軟體包名稱(可能帶有諸如 dev、 peer 或 optional 的字尾)
  • 當前版本:當前已安裝的版本
  • 目標版本:將要安裝的版本(遵循 semver 約束)
  • 最新版本:最新可用版本

鍵盤操作

選擇操作:

  • 空格:切換軟體包的選擇狀態
  • 回車:確認選擇並更新
  • a/A:全選所有軟體包
  • n/N:全不選
  • i/I:反選

導航操作:

  • ↑/↓ 方向鍵 或 j/k:移動游標
  • l/L:切換當前軟體包的目標版本和最新版本顯示

退出:

  • Ctrl+C 或 Ctrl+D:取消且不更新

視覺指示

  • ■ 已選中的軟體包(將被更新)
  • □ 未選中的軟體包
  • ❯ 當前游標位置
  • 顏色:紅色(主版本)、黃色(次版本)、綠色(補丁版本)變更
  • 下劃線:當前選中的更新目標

包分組

軟體包根據相依型別分組:

  • dependencies - 常規執行環境相依
  • devDependencies - 開發相依
  • peerDependencies - 同級相依
  • optionalDependencies - 可選相依

在每個分組中,單個軟體包可能帶有後綴( dev、 peer、 optional)。

--recursive 和 --filter

在 monorepo 中,bun update 只會重寫你執行命令所在工作區的 package.json。在根目錄執行環境,它仍會更新 bun.lock 中每個工作區的傳遞相依。

  • --recursive(-r)會更新每個工作區的 package.json。
  • --filter <pattern>(-F)會使用篩選語法僅更新匹配的工作區。與 bun install --filter 一樣,Bun 之後只會連結選中的工作區。

兩者都可以與軟體包名稱、--latest、--dry-run 和 --interactive 結合使用(後者會新增一個“工作區”列)。

terminal
bun update --recursive
bun update --filter './packages/*'
bun update -i -r
bun update zod -r
bun update zod --filter '...^ui'

--dev、--prod、--no-optional

限制 Bun 要更新的 package.json 條目:

  • --dev(-D)只更新 devDependencies。
  • --prod(-P)只更新 dependencies 和 optionalDependencies。
  • --no-optional 跳過 optionalDependencies。

它們可以與名稱、模式、--latest 和 --interactive 結合使用。

這些標誌只會選擇要更新的內容——bun update --prod 仍會安裝 devDependencies。

terminal
bun update --dev
bun update --prod --latest
bun update -D '@types/*'
bun update -i --prod

--global

bun update -g 會更新通過 bun add -g 安裝的軟體包:

terminal
bun update -g
bun update -g typescript

--latest

預設情況下,bun update 會將每個相依項更新到滿足 package.json 中版本範圍的最新版本。

若要不受已聲明範圍限制、將直接相依更新到最新版本,請使用 --latest(-L)。Bun 會將 package.json 條目重寫為新版本的同類範圍。傳遞相依仍會遵循其相依項宣告的範圍。Bun 不會降級已高於 latest 的相依項(例如,預釋出版本)。

terminal
bun update --latest
bun update -L

在互動模式下,按 l 可在軟體包的目標版本(遵循 semver)和最新版本之間切換。

例如,以下 package.json:

package.json
{
  "dependencies": {
    "react": "^17.0.2"
  }
}
  • bun update 會升級到匹配 17.x 的版本。
  • bun update --latest 會升級到匹配 18.x 或更高版本。

CLI 用法

terminal
bun update [<name>[@<version>] | <pattern>]...
bun up

更新策略

--forceboolean

始終從登錄檔請求最新版本並重新安裝所有相依。別名: -f

--latestboolean

將軟體包更新到最新版本。別名: -L

相依範圍

--devboolean

僅更新 devDependencies。別名: -D

--prodboolean

僅更新 dependencies 和 optionalDependencies。別名: -P、 --production

--no-optionalboolean

不更新 optionalDependencies

--globalboolean

全域性安裝。別名: -g

--omitstring

從安裝中排除 dev、optional 或 peer 相依

專案檔案管理

--yarnboolean

寫入 yarn.lock 檔案(yarn v1)。別名: -y

--no-saveboolean

不更新 package.json 或儲存鎖檔案

--savebooleandefault true

儲存到 package.json(預設啟用)

--frozen-lockfileboolean

禁止修改鎖檔案

--save-text-lockfileboolean

儲存基於文本的鎖檔案

--lockfile-onlyboolean

僅生成鎖檔案,不安裝相依

網路與登錄檔

--castring

提供證書頒發機構(CA)簽發證書

--cafilestring

與 --ca 相同,但作為證書的檔案路徑

--registrystring

預設使用指定登錄檔,覆蓋 .npmrc、bunfig.toml 和環境變數設定

--network-concurrencynumberdefault 48

最大並行網路請求數(預設 48)

快取

--cache-dirstring

從指定目錄路徑儲存及載入快取資料

--no-cacheboolean

完全忽略清單快取

輸出與日誌

--silentboolean

不輸出任何日誌

--verboseboolean

過度詳細的日誌輸出

--no-progressboolean

停用進度條

--no-summaryboolean

不列印摘要資訊

指令碼執行

--ignore-scriptsboolean

跳過所有軟體包的生命週期指令碼,包括專案的 package.json 和受信任的相依項

--concurrent-scriptsnumber

生命週期指令碼的最大並行任務數(預設值:CPU 核心數的 2 倍)

安裝控制

--no-verifyboolean

跳過校驗新下載包的完整性

--trustboolean

新增到專案 package.json 的 trustedDependencies 並安裝包

--backendstring

用於安裝相依項的平臺特定最佳化。可能的值:clonefile(macOS 上的預設值)、hardlink(Linux 和 Windows 上的預設值)、symlink、copyfile

常規與環境

--configstring

指定設定檔路徑(bunfig.toml)。別名: -c

--dry-runboolean

解析更新,但不安裝軟體包、不更新 package.json 或儲存鎖檔案(專案自身的生命週期指令碼仍會執行)

--cwdstring

設定特定的當前工作目錄

--helpboolean

列印此幫助選單。別名: -h