bun update
將相依項更新到其版本範圍允許的最新版本
bun update(別名 bun up)會將每個直接和傳遞相依更新到其請求範圍允許的最新版本。隨後,它會重寫 package.json 和 bun.lock。若要忽略已宣告的範圍,請使用 --latest。
bun update
要更新特定的軟體包,請傳入其名稱。名稱可以是 glob 模式,! 用於排除:
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 標誌選擇要更新的軟體包:
bun update --interactive
bun update -i
--interactive 會開啟一個終端介面,列出所有過時的直接相依。Bun 會更新你選中的軟體包,效果等同於執行 bun update <name> ...;其他軟體包都會保留其鎖定版本。
互動介面
介面顯示按相依型別分組的軟體包:
? 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 結合使用(後者會新增一個“工作區”列)。
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。
bun update --dev
bun update --prod --latest
bun update -D '@types/*'
bun update -i --prod
--global
bun update -g 會更新通過 bun add -g 安裝的軟體包:
bun update -g
bun update -g typescript
--latest
預設情況下,bun update 會將每個相依項更新到滿足 package.json 中版本範圍的最新版本。
若要不受已聲明範圍限制、將直接相依更新到最新版本,請使用 --latest(-L)。Bun 會將 package.json 條目重寫為新版本的同類範圍。傳遞相依仍會遵循其相依項宣告的範圍。Bun 不會降級已高於 latest 的相依項(例如,預釋出版本)。
bun update --latest
bun update -L
在互動模式下,按 l 可在軟體包的目標版本(遵循 semver)和最新版本之間切換。
例如,以下 package.json:
{
"dependencies": {
"react": "^17.0.2"
}
}
bun update會升級到匹配17.x的版本。bun update --latest會升級到匹配18.x或更高版本。
CLI 用法
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