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

bunfig.toml

使用設定檔 bunfig.toml 設定 Bun 的行為

bunfig.toml 是 Bun 的設定檔。

Bun 會盡可能使用現有的設定檔,例如 package.json 和 tsconfig.json;bunfig.toml 僅用於 Bun 特有的設定。該檔案是可選的,即使沒有它,Bun 也能正常工作。

全域性 vs. 本地

將 bunfig.toml 放在專案根目錄中,與 package.json 放在一起。

如需全域性設定 Bun 的套件管理器,也可以在以下任一路徑建立 .bunfig.toml 檔案:

  • $HOME/.bunfig.toml
  • $XDG_CONFIG_HOME/.bunfig.toml

只有套件管理器命令(bun install、bun add、bun remove、bun update、bun pm、bunx 等)會讀取全域性檔案。如果 Bun 同時找到全域性和本地 bunfig,則會載入二者;本地檔案中設定的鍵會覆蓋全域性檔案中的同名鍵。適用時,CLI 標誌會覆蓋 bunfig 設定。

執行環境

頂層欄位用於設定 Bun 的執行環境行為。

preload

一個指令碼/外掛陣列,在執行檔案或指令碼前執行。

bunfig.toml
# 在使用 `bun run` 執行檔案或指令碼前執行的指令碼
# 通過新增到此列表來註冊外掛
preload = ["./preload.ts"]

jsx

設定 Bun 處理 JSX 的方式。你也可以在 tsconfig.json 的 compilerOptions 中設定這些欄位,但 bunfig.toml 支援在非 TypeScript 專案中使用它們。

bunfig.toml
jsx = "react"
jsxFactory = "h"
jsxFragment = "Fragment"
jsxImportSource = "react"

有關這些欄位的更多資訊,請參考 tsconfig 文件:

smol

啟用 smol 模式。此模式會降低記憶體使用,但會犧牲效能。

bunfig.toml
# 降低記憶體使用,犧牲效能
smol = true

logLevel

設定日誌級別:"debug"、"warn" 或 "error"。

bunfig.toml
logLevel = "debug" # "debug" | "warn" | "error"

define

define 欄位會將全域性識別符號替換為常量表達式,無論它們出現在哪裡。該表示式應為 JSON 字串。

bunfig.toml
[define]
# 將所有 "process.env.bagel" 的使用替換為字串 `lox`
# 值會被解析為 JSON,但支援單引號字串,且 `'undefined'` 在 JS 中表示 undefined。
# 未來版本可能改為普通的 TOML 格式,目前保留此用法是繼承自 CLI 引數解析。
"process.env.bagel" = "'lox'"

loader

設定 Bun 將副檔名對映到載入器的方式。使用此設定可以載入 Bun 原生不支援的檔案型別。

bunfig.toml
[loader]
# 當匯入 .bagel 檔案時,將其視為 tsx 檔案
".bagel" = "tsx"

Bun 支援以下載入器:

  • jsx
  • js
  • ts
  • tsx
  • css
  • file
  • json
  • toml
  • wasm
  • napi
  • base64
  • dataurl
  • text

telemetry

telemetry 欄位用於啟用或停用分析功能。預設情況下,遙測處於啟用狀態。此設定等同於 DO_NOT_TRACK 環境變數。

我們目前不會收集分析資料;此設定僅控制匿名崩潰報告。我們計劃收集諸如哪些 Bun API 使用最頻繁、或 bun build 花費多長時間等資訊。

bunfig.toml
telemetry = false

env

設定自動載入 .env 檔案的行為。Bun 預設會載入 .env 檔案。要停用此行為:

bunfig.toml
# 停用自動載入 .env 檔案
env = false

也可以使用物件語法並設定 file 屬性:

bunfig.toml
[env]
file = false

在生產環境或 CI/CD 流程中,如果你希望完全相依系統環境變數,可以使用此設定。

即使停用了預設載入,Bun 仍會載入通過 --env-file 顯式傳入的檔案。

console

設定控制台輸出行為。

console.depth

設定 console.log() 物件檢測的預設深度。預設值為 2。

bunfig.toml
[console]
depth = 3

較高的值會顯示更多巢狀屬性,但對於複雜物件可能會產生冗長的輸出。--console-depth CLI 標誌會覆蓋此設定。

服務

[serve] 部分用於設定 Bun.serve 和提供 HTTP 服務時的 bun run。

serve.port

Bun.serve 監聽的預設埠。預設值為 3000。你也可以通過 BUN_PORT 或 PORT 環境變數,或 --port 標誌進行設定。

bunfig.toml
[serve]
port = 3000

測試執行器

bunfig.toml 的 [test] 部分用於設定測試執行器。

bunfig.toml
[test]
# 在這裡進行設定

test.root

執行測試的根目錄。預設 .。

bunfig.toml
[test]
root = "./__tests__"

test.preload

與頂級 preload 欄位相同,但僅應用於 bun test。

bunfig.toml
[test]
preload = ["./setup.ts"]

test.pathIgnorePatterns

使用 glob 模式從測試發現中排除檔案和目錄。測試執行器會在掃描期間剪除匹配的目錄,因此不會遍歷其中的內容。如果專案包含帶有 *.test.ts 檔案、且不希望被 bun test 發現的子模組或 vendored 程式碼,可以使用此設定。

bunfig.toml
[test]
pathIgnorePatterns = ["vendor/**", "submodules/**", "fixtures/**"]

等效 CLI 標誌:--path-ignore-patterns。CLI 標誌完全覆蓋 bunfig.toml 的值。

test.smol

與頂級 smol 欄位相同,但僅應用於 bun test。

bunfig.toml
[test]
smol = true

test.coverage

啟用覆蓋率報告。預設 false。可以使用 --coverage 來覆蓋。

bunfig.toml
[test]
coverage = false

test.coverageThreshold

覆蓋率閾值。預設不設定閾值。如果測試套件未達到該閾值,bun test 將以非零退出程式碼退出。

bunfig.toml
[test]

# 要求達到 90% 的行級和函式級覆蓋率
coverageThreshold = 0.9

你可以為行覆蓋率和函式覆蓋率分別設定閾值。Bun 接受 statements 鍵,但目前不會強制執行該閾值。

bunfig.toml
[test]
coverageThreshold = { lines = 0.7, functions = 0.8 }

test.coverageSkipTestFiles

計算覆蓋率統計時是否跳過測試檔案。預設 false。

bunfig.toml
[test]
coverageSkipTestFiles = false

test.coverageIgnoreSourcemaps

是否報告轉譯後的輸出覆蓋率,而不是通過 sourcemaps 將行號映射回原始原始碼。預設 false。主要用於除錯。

bunfig.toml
[test]
coverageIgnoreSourcemaps = false

test.coveragePathIgnorePatterns

使用 glob 模式從覆蓋率報告中排除檔案。可以接受單個模式或模式陣列。

bunfig.toml
[test]
# 單個模式
coveragePathIgnorePatterns = "**/*.spec.ts"

# 多個模式
coveragePathIgnorePatterns = [
  "**/*.spec.ts",
  "**/*.test.ts",
  "src/utils/**",
  "*.config.js"
]

test.coverageReporter

預設情況下,測試執行器會將覆蓋率報告列印到控制台。如需生成 CI 和其他工具可讀取的持久化報告,請使用 lcov。

bunfig.toml
[test]
coverageReporter  = ["text", "lcov"]  # 預設 ["text"]

test.coverageDir

設定儲存覆蓋率報告的路徑。此設定僅適用於 lcov 等持久化報告器。

bunfig.toml
[test]
coverageDir = "path/to/somewhere"  # 預設 "coverage"

test.randomize

以隨機順序執行測試。預設 false。

bunfig.toml
[test]
randomize = true

每次以不同順序執行測試有助於發現與測試相互相依相關的錯誤。與 seed 結合使用時,隨機順序可以復現。

--randomize CLI 標誌會覆蓋此設定。

test.seed

設定測試隨機化的隨機種子。需要 randomize 為 true。

bunfig.toml
[test]
randomize = true
seed = 2444615283

隨機種子可以讓測試順序在多次執行之間保持可復現,從而有助於除錯不穩定的測試。

--seed CLI 標誌會覆蓋此設定。

test.rerunEach

每個測試檔案重複執行指定次數。預設 0(執行一次)。

bunfig.toml
[test]
rerunEach = 3

可以使用此設定來發現不穩定的測試或非確定性行為。

--rerun-each CLI 標誌會覆蓋此設定。

test.retry

所有測試的預設重試次數。測試執行器最多會重試失敗的測試指定次數。每個測試的 { retry: N } 設定會覆蓋此值。預設 0(不重試)。

bunfig.toml
[test]
retry = 3

--retry CLI 標誌會覆蓋此設定。

test.concurrentTestGlob

匹配此 glob 模式的測試檔案將並行執行其中的所有測試,就像傳入了 --concurrent 標誌一樣。

bunfig.toml
[test]
concurrentTestGlob = "**/concurrent-*.test.ts"

可以使用此設定逐步將測試套件遷移到並行執行,或在保持單元測試順序執行的同時並行執行整合測試。

--concurrent CLI 標誌會覆蓋此設定。

test.onlyFailures

啟用後,輸出中只顯示失敗的測試,從而減少大型測試套件中的冗餘資訊。預設 false。

bunfig.toml
[test]
onlyFailures = true

等效於 --only-failures 標誌。

test.reporter

設定測試報告器設定。

test.reporter.dots

啟用點號報告器,每個測試列印一個點。預設 false。

bunfig.toml
[test.reporter]
dots = true

test.reporter.junit

啟用 JUnit XML 報告,並指定輸出檔案路徑。

bunfig.toml
[test.reporter]
junit = "test-results.xml"

CI 系統和其他工具可以使用此報告。

套件管理器

[install] 部分設定 bun install 的行為。

bunfig.toml
[install]
# 這裡進行設定

install.optional

是否安裝可選相依。預設 true。

bunfig.toml
[install]
optional = true

install.dev

是否安裝開發相依。預設 true。

bunfig.toml
[install]
dev = true

install.peer

是否安裝 peer 相依。預設 true。

bunfig.toml
[install]
peer = true

install.production

是否讓 bun install 在“生產模式”下執行。預設 false。

在生產模式下,Bun 不會安裝 "devDependencies",並會凍結鎖檔案(與 install.frozenLockfile 相同)。使用 --production CLI 標誌可為單次安裝啟用此模式。由於生產模式會凍結鎖檔案,因此啟用該模式時,bun add、bun remove 和 bun update 會失敗。

bunfig.toml
[install]
production = false

install.exact

是否在 package.json 中設定精確版本號。預設 false。

預設情況下,Bun 使用 caret 範圍。如果某個包的 latest 版本為 2.4.1,Bun 會在你的 package.json 中寫入 ^2.4.1。該範圍接受從 2.4.1 起、但不包括 3.0.0 的任何版本。

bunfig.toml
[install]
exact = false

install.ignoreScripts

安裝期間是否跳過生命週期指令碼。預設 false。等同於 --ignore-scripts 標誌。

當設定為 true 時,Bun 不會執行任何 preinstall / install / postinstall / prepare 指令碼,包括專案中的指令碼和 trustedDependencies 中包的指令碼。請參閱生命週期指令碼。

bunfig.toml
[install]
ignoreScripts = false

install.concurrentScripts

一次可並行執行的生命週期指令碼最大數量。預設為 CPU 核心數的兩倍。等同於 --concurrent-scripts 標誌。

bunfig.toml
[install]
concurrentScripts = 5

install.saveTextLockfile

如果為 false,當不存在鎖檔案時,bun install 會生成二進位制 bun.lockb,而不是基於文本的 bun.lock 檔案。

預設自 Bun v1.2 起為 true。

bunfig.toml
[install]
saveTextLockfile = false

install.auto

設定 Bun 的自動安裝行為。預設值為 "auto"——找不到 node_modules 資料夾時,Bun 會在執行期間即時安裝相依。

bunfig.toml
[install]
auto = "auto"

有效值說明:

值描述
"auto"如果存在本地 node_modules,則從中解析模組。否則,在執行環境自動安裝相依。
"force"即使存在 node_modules,也總是自動安裝相依。
"disable"從不自動安裝相依。
"fallback"先檢查本地 node_modules,對未找到的包自動安裝。CLI 可用 bun -i 啟用。

install.prefer

設定 Bun 在執行指令碼時如何針對 npm 登錄檔解析包版本。預設 "online"。

bunfig.toml
[install]
prefer = "online"

有效值:

值描述
"online"預設值。根據需要檢查登錄檔中的包是否過期。
"offline"跳過過期檢查,並從本地快取解析包。等同於 --prefer-offline(bun install 也支援此選項)。
"latest"始終向 npm 查詢最新的匹配版本。等同於 --prefer-latest。

install.offline

當設定為 true 時,bun install 永遠不會訪問網路:包後設資料和 tarball 必須已在快取中,缺少任何內容都會報錯。預設 false。等同於 bun install --offline。如需使用更寬鬆的“儘可能使用快取”行為,請參閱 install.prefer = "offline" / --prefer-offline。

bunfig.toml
[install]
offline = true

install.frozenLockfile

當設定為 true 時,bun install 不會更新 bun.lock。預設 false。如果 package.json 與現有的 bun.lock 不一致,安裝會報錯。

bunfig.toml
[install]
frozenLockfile = false

install.dryRun

是否讓 bun install 解析相依但不安裝。預設 false。當設定為 true 時,等同於向所有 bun install 命令傳入 --dry-run。

bunfig.toml
[install]
dryRun = false

install.globalDir

Bun 存放全域性安裝包的目錄。

環境變數:BUN_INSTALL_GLOBAL_DIR

bunfig.toml
[install]
# `bun install --global` 安裝包的位置
globalDir = "~/.bun/install/global"

install.globalBinDir

Bun 連結全域性安裝包二進位制檔案的目錄。

環境變數:BUN_INSTALL_BIN

bunfig.toml
[install]
# 全域性安裝包的二進位制檔案連結存放位置
globalBinDir = "~/.bun/bin"

install.registry

預設登錄檔為 https://registry.npmjs.org/。如需更改:

bunfig.toml
[install]
# 以字串形式設定預設登錄檔
registry = "https://registry.npmjs.org"
# 設定 token
registry = { url = "https://registry.npmjs.org", token = "123456" }
# 設定使用者名稱/密碼
registry = "https://username:password@registry.npmjs.org"

install.linkWorkspacePackages

是否將工作區包從 monorepo 根目錄連結到各自的 node_modules 目錄。預設 true。

bunfig.toml
[install]
linkWorkspacePackages = true

install.scopes

如需為特定作用域(例如 @myorg/<package>)設定登錄檔,請使用 install.scopes。你可以使用 $variable 語法引用環境變數。

bunfig.toml
[install.scopes]
# 字串格式登錄檔
myorg = "https://username:password@registry.myorg.com/"

# 帶使用者名稱/密碼,支援引用環境變數
myorg = { username = "myusername", password = "$npm_password", url = "https://registry.myorg.com/" }

# 帶 token
myorg = { token = "$npm_token", url = "https://registry.myorg.com/" }

install.ca 和 install.cafile

如需設定 CA 證書,請將 install.ca 設定為證書字串,或將 install.cafile 設定為證書檔案的路徑。

bunfig.toml
[install]
# CA 證書內容(字串)
ca = "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----"

# CA 證書檔案路徑,檔案可以包含多個證書
cafile = "path/to/cafile"

install.cache

設定快取行為:

bunfig.toml
[install.cache]

# 快取目錄
dir = "~/.bun/install/cache"

# 為 true 則不從全域性快取載入
# 但 Bun 仍可能寫入 node_modules/.cache
disable = false

# 為 true 始終從登錄檔解析最新版本
disableManifest = false

install.lockfile

是否在執行 bun install 時生成鎖檔案。預設 true。

bunfig.toml
[install.lockfile]
save = true

是否在 bun.lock 之外同時生成非 Bun 鎖檔案。(Bun 始終會建立 bun.lock。)"yarn" 是唯一受支援的值。

bunfig.toml
[install.lockfile]
print = "yarn"

install.linker

設定連結器策略:即 bun install 如何在 node_modules 中組織相依。對於新的工作區,預設為 "isolated";對於新的單包專案和現有專案(在 v1.3.2 之前建立),預設為 "hoisted"。

請參閱隔離安裝。

bunfig.toml
[install]
linker = "hoisted"

有效值:

值描述
"hoisted"將相依連結到共享的 node_modules 目錄。
"isolated"每個包安裝內部各自連結相依。

install.globalStore

使用 "isolated" 連結器時,可在 <cache>/links/ 下的全域性虛擬儲存中共享多個專案之間的包安裝。Bun 會將 node_modules/.bun/<pkg>@<ver> 連結到儲存中,而不是將每個包實際寫入專案目錄。這樣,在執行 rm -rf node_modules 後進行熱安裝,速度可提高一個數量級。預設 false。你也可以通過 BUN_INSTALL_GLOBAL_STORE 環境變數進行設定。

請參閱全域性虛擬儲存。

bunfig.toml
[install]
globalStore = true

install.publicHoistPattern

使用 "isolated" 連結器時,Bun 會將匹配這些 glob 模式的包提升到根 node_modules 目錄,使專案中的任何包都可以解析它們。預設 []。與 pnpm 的 public-hoist-pattern 類似。

bunfig.toml
[install]
publicHoistPattern = ["*eslint*", "*prettier*"]

install.hoistPattern

使用 "isolated" 連結器時,Bun 會將匹配這些 glob 模式的包提升到虛擬儲存中的回退目錄(node_modules/.bun/node_modules),使虛擬儲存中的其他包可以解析它們。預設情況下,Bun 會將所有包提升到此目錄中,等同於 ["*"]。與 pnpm 的 hoist-pattern 類似。

bunfig.toml
[install]
hoistPattern = ["*"]

install.hoist

使用 "isolated" 連結器時,Bun 會建立 node_modules/.bun/node_modules。此回退目錄包含指向每個已安裝包的符號連結;如果設定了 install.hoistPattern,則只包含指向匹配包的符號連結。該目錄位於儲存中每個包的向上解析路徑上,因此包仍可解析自己未宣告的相依(“幽靈相依”)。將 hoist = false 可完全跳過此目錄的建立。此時,除非匯入的包已連結到專案根目錄的 node_modules(即直接相依、匹配 publicHoistPattern 的包或工作區包),否則儲存中包的未宣告匯入會失敗。專案自身的 node_modules 符號連結不會改變。預設 true。等同於 pnpm 的 hoist 設定,包括此處提到的根 node_modules 注意事項;其優先順序高於 install.hoistPattern。

此設定僅適用於 "isolated" 連結器。提升式安裝不受影響:在那裡,扁平的 node_modules 樹本身就是佈局,而不是由此開關控制的內容。

bunfig.toml
[install]
hoist = false

install.logLevel

設定 bun install 的日誌級別。可以是 "debug"、"warn" 或 "error"。

bunfig.toml
[install]
logLevel = "warn"

install.security.scanner

設定安全掃描器,在安裝前掃描包中的安全漏洞。

首先,從 npm 安裝安全掃描器:

terminal
bun add -d @oven/bun-security-scanner

然後在你的 bunfig.toml 中進行設定:

bunfig.toml
[install.security]
scanner = "@oven/bun-security-scanner" # 範例名稱,請替換為你的掃描器包名

設定安全掃描器後:

  • 自動安裝功能會自動停用,以保障安全
  • 安裝前掃描包
  • 發現嚴重問題時取消安裝
  • 安裝過程中顯示安全警告

詳細瞭解使用和編寫安全掃描器。

install.minimumReleaseAge

設定 npm 包版本的最短髮布時間(秒)。安裝過程中,Bun 會篩除釋出時間早於此閾值的包版本。預設 null(停用)。

bunfig.toml
[install]
# 只安裝至少 3 天前釋出的包版本
minimumReleaseAge = 259200

請參閱最短髮布時間。

install.minimumReleaseAgeExcludes

從 minimumReleaseAge 檢查中排除的包名陣列。預設 []。

bunfig.toml
[install]
minimumReleaseAge = 259200
# 這些包將繞過 3 天的最小發布時間要求
minimumReleaseAgeExcludes = ["@types/bun", "typescript"]

bun run

[run] 部分用於設定 bun run 命令。這些設定也適用於執行檔案、指令碼或執行檔時使用的 bun 命令。

對於 bun run,Bun 只會自動載入本地專案的 bunfig.toml(不會檢查全域性 .bunfig.toml)。

run.shell — 使用系統 shell 還是 Bun 的 shell

使用 bun run 或 bun 執行 package.json 指令碼時所使用的 shell。在 Windows 上預設為 "bun",在其他平臺上預設為 "system"。

如需始終使用系統 shell 而非 Bun 的 shell(除 Windows 外所有平臺上的預設設定):

bunfig.toml
[run]
# 非 Windows 的預設值
shell = "system"

如需始終使用 Bun 的 shell 而非系統 shell:

bunfig.toml
[run]
# Windows 的預設值
shell = "bun"

run.bun — 自動將 node 別名為 bun

當設定為 true 時,對於由 bun run 或 bun 呼叫的所有指令碼或執行檔,Bun 會在 $PATH 前新增一個指向 bun 二進位制檔案的 node 符號連結。

執行 node 的指令碼會改為執行 bun,無需修改指令碼。此行為會遞迴應用,因此,如果某個指令碼執行另一個會執行 node 的指令碼,該指令碼也會執行 bun。此別名也適用於指向 node 的 shebang。

預設情況下,如果 $PATH 中尚無 node,此功能啟用。

bunfig.toml
[run]
# 相當於為所有 `bun run` 命令啟用 `--bun`
bun = true

你可以通過以下命令測試:

shell
bun --bun which node # bun 二進位制檔案的路徑
bun which node      # node 二進位制檔案的路徑

此選項等同於為所有 bun run 命令加上 --bun 引數:

shell
bun --bun run dev
bun --bun dev
bun run --bun dev

設為 false 可停用 node 符號連結。

run.silent — 靜默執行,不輸出命令提示

設為 true 時,bun run 和 bun 不會列印正在執行的命令。

bunfig.toml
[run]
silent = true

如果不使用此選項,Bun 會將正在執行的命令列印到控制台:

terminal
bun run dev
echo "正在執行 \"dev\"..."
Text
正在執行 "dev"...

使用此選項後,Bun 不會列印正在執行的命令:

shell
bun run dev
Text
正在執行 "dev"...

這等同於對所有 bun run 命令使用 --silent 引數:

shell
bun --silent run dev
bun --silent dev
bun run --silent dev

run.elide-lines - 截斷過濾後的輸出

在終端中使用 --filter 時,將每個指令碼的輸出截斷為最後 N 行。預設 0(顯示所有行)。等同於 --elide-lines 標誌。

bunfig.toml
[run]
elide-lines = 10

run.noOrphans - 不留下孤兒行程

設為 true 時,Bun 會監視啟動它的行程,並在該父行程消失後立即退出,即使父行程被強制終止而來不及轉發訊號。當 Bun 自身退出時,也會終止所有後代行程,以確保它啟動的行程不會繼續執行。適用於由可能被強制終止的監控程式(Electron、CI 執行器或輕量級 shim)啟動 Bun 的情況。

在 Linux 上,Bun 使用 prctl(PR_SET_PDEATHSIG) 和 /proc 後代行程遍歷。在 macOS 上,Bun 使用事件迴圈 kqueue 上的 EVFILT_PROC/NOTE_EXIT 和 libproc 後代行程遍歷。在 Windows 上,Bun 使用父行程控制代碼的執行緒池等待和關閉時終止行程的 Job Object。

等同於 --no-orphans CLI 標誌或 BUN_FEATURE_FLAG_NO_ORPHANS=1 環境變數。

bunfig.toml
[run]
noOrphans = true