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

bun add

使用 Bun 的快速套件管理器向您的專案新增包

新增特定包:

terminal
bun add preact

指定版本、版本範圍或標籤:

terminal
bun add zod@3.20.0
bun add zod@^3.0.0
bun add zod@latest

除非傳入 --dev、--optional 或 --peer,否則 Bun 會將包寫入 dependencies。如果 package.json 已在其他分組中列出了該包,Bun 會在原位置更新該條目。

--dev

將包作為開發相依("devDependencies")新增:

terminal
bun add --dev @types/react
bun add -d @types/react

--optional

將包作為可選相依("optionalDependencies")新增:

terminal
bun add --optional lodash

--peer

將包作為對等相依("peerDependencies")新增:

terminal
bun add --peer @types/bun

Bun 預設會安裝對等相依,因此不需要額外的 devDependencies 條目。

--exact

要將軟體包固定為已解析的版本,請使用 --exact。Bun 會將確切的版本號寫入 package.json,而不是版本範圍。

terminal
bun add react --exact
bun add react -E

package.json 中的區別:

package.json
{
  "dependencies": {
    // 不使用 --exact
    "react": "^18.2.0", // 匹配 >= 18.2.0 < 19.0.0

    // 使用 --exact
    "react": "18.2.0" // 僅精確匹配 18.2.0 版本
  }
}

檢視此命令的完整選項列表:

terminal
bun add --help

--catalog

在工作區中,--catalog 會將版本寫入根目錄的 package.json catalog,並將 "catalog:" 新增到當前包。--catalog=<name> 使用命名目錄(workspaces.catalogs.<name>),並寫入 "catalog:<name>"。

terminal
bun add react --catalog
bun add vitest --catalog=testing
package.json
// root package.json
{
  "workspaces": {
    "packages": ["packages/*"],
    "catalog": {
      "react": "^18.2.0" // [!code ++]
    }
  }
}
packages/app/package.json
{
  "dependencies": {
    "react": "catalog:" // [!code ++]
  }
}
  • 如果目錄中已有條目,Bun 會複用該條目,並僅將 "catalog:" 寫入當前包。傳入顯式版本(bun add react@19 --catalog)可替換該條目——這會影響所有引用它的包。
  • 如果省略版本,且當前 package.json 已有版本範圍("react": "^18.2.0"),Bun 會將該版本範圍新增到目錄中。
  • 已引用 "catalog:<name>" 的包會繼續使用該目錄。
  • 使用 = 附加名稱:--catalog=testing,而不是 --catalog testing。
  • Bun 會在目錄中以包的實際名稱記錄 tarball 和 Git 說明符。它會拒絕相對路徑和工作區包。

即使沒有該標誌,如果預設目錄中已經列出了 react,bun add react(不帶版本)也會寫入 "catalog:"。傳入版本則會寫入具體範圍。

--filter

在 monorepo 中,將包新增到匹配的工作區,而不是當前目錄的包中。有關模式語法,請參閱篩選。重複該標誌可組合多個模式;!pattern 用於排除。

terminal
bun add zod --filter api
bun add -d typescript --filter './packages/*'
bun add ./vendor/logger --filter '*'
bun remove zod --filter '*' --filter '!api'
  • * 匹配每個工作區包,但不包括根目錄。要包含根目錄,請指定其名稱:--filter '*' --filter '<root-name>'。
  • 如果沒有工作區匹配,Bun 不會寫入任何內容,並且命令會失敗。
  • Bun 會從當前目錄解析本地路徑,並將它們重寫為相對於每個選定包的路徑。
  • 與 bun install --filter 一樣,Bun 會更新整個儲存庫的 bun.lock,但只會將選定的工作區連結到 node_modules。
  • 不能與 --global 同時使用。

--global

要全域性安裝軟體包,請使用 -g/--global 標誌。這不會修改當前專案的 package.json。使用它來安裝命令列工具。

terminal
bun add --global cowsay # 或 `bun add -g cowsay`
cowsay "Bun!"
Text
 ______
< Bun! >
 ------
        \   ^__
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
設定全域性安裝行為
bunfig.toml
[install]
# `bun add --global` 安裝包的位置
globalDir = "~/.bun/install/global"

# 全域性安裝的包二進位制檔案連結位置
globalBinDir = "~/.bun/bin"

受信任的相依

與其他 npm 客戶端不同,Bun 不會執行已安裝相依的任意生命週期指令碼,如 postinstall。這些指令碼存在安全風險,可能在您的機器上執行任意程式碼。

要讓 Bun 允許特定包的生命週期指令碼,請在您的 package.json 中將該包新增到 trustedDependencies。

package.json
{
  "name": "my-app",
  "version": "1.0.0",
  "trustedDependencies": ["my-trusted-package"] // [!code ++]
}

Bun 會讀取此欄位,並執行 my-trusted-package 的生命週期指令碼。

Git 相依

新增來自公共或私有 Git 儲存庫的相依:

terminal
bun add git@github.com:moment/moment.git

Bun 支援多種協議,包括 github、git、git+ssh 和 git+https。

package.json
{
  "dependencies": {
    "dayjs": "git+https://github.com/iamkun/dayjs.git",
    "lodash": "git+ssh://github.com/lodash/lodash.git#4.17.21",
    "moment": "git@github.com:moment/moment.git",
    "zod": "github:colinhacks/zod"
  }
}

Tarball 相依

包名可以對應一個公開託管的 .tgz 檔案。Bun 會從該 tarball URL 下載並安裝包,而不是從包登錄檔安裝。

terminal
bun add zod@https://registry.npmjs.org/zod/-/zod-3.21.4.tgz

bun add 會將 URL 寫入你的 package.json:

package.json
{
  "dependencies": {
    "zod": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz"
  }
}

Tarball URL 可以包含憑據,例如 https://user:password@example.com/zod-3.21.4.tgz。Bun 會像 npm 一樣,將這些憑據作為 Authorization: Basic 標頭髮送,並在請求 URL 時移除憑據。包含憑據的 URL 會寫入 package.json 和鎖檔案。


CLI 使用方法

bash
bun add <package> <@version>

相依管理

--productionboolean

不安裝 devDependencies。別名:-p

--omitstring

安裝時排除 dev、optional 或 peer 相依

--globalboolean

全域性安裝。別名:-g

--devboolean

新增相依到 devDependencies。別名:-d

--optionalboolean

新增相依到 optionalDependencies

--peerboolean

新增相依到 peerDependencies

--exactboolean

新增精確版本,而非 ^ 範圍。別名:-E

--only-missingboolean

僅在 package.json 中不存在該相依時才新增

--catalogstring

將解析後的版本新增到根目錄 package.json 的 catalog 中,並以 catalog: 的形式相依它; --catalog=NAME 指向 catalogs.NAME

--filterstring

將軟體包新增到匹配的工作區,而不是當前軟體包。別名:-F

專案檔案與鎖檔案

--yarnboolean

生成 yarn.lock 檔案(yarn v1)。別名:-y

--no-saveboolean

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

--savebooleandefault true

儲存到 package.json

--frozen-lockfileboolean

不允許修改鎖檔案

--trustboolean

將相依新增到專案 package.json 的 trustedDependencies 並安裝該包

--save-text-lockfileboolean

儲存為文本格式的鎖檔案

--lockfile-onlyboolean

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

安裝控制

--dry-runboolean

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

--forceboolean

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

--no-verifyboolean

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

--ignore-scriptsboolean

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

--analyzeboolean

遞迴分析並安裝作為引數傳入檔案的相依(使用 Bun 的打包器)。別名:-a

網路與登錄檔

--castring

提供證書頒發機構簽名證書

--cafilestring

與 --ca 相同,但通過證書檔案路徑提供

--registrystring

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

--network-concurrencynumberdefault 48

最大並行網路請求數

效能與資源

--backendstring

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

--concurrent-scriptsnumber

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

快取

--cache-dirstring

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

--no-cacheboolean

完全忽略清單快取

輸出與日誌

--silentboolean

不輸出任何日誌

--verboseboolean

輸出超詳細日誌

--no-progressboolean

關閉進度條

--no-summaryboolean

不列印總結資訊

全域性設定與上下文

--configstring

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

--cwdstring

設定當前工作目錄

幫助

--helpboolean

顯示此幫助選單。別名:-h