Bun

bunfig.toml

Bun 的行為可以使用其組態檔 bunfig.toml 進行設定。

一般來說,Bun 依賴預先存在的組態檔,如 package.jsontsconfig.json 來設定其行為。bunfig.toml 僅在設定 Bun 特有的事項時才是必要的。此檔案為選用性質,即使沒有它,Bun 也能正常運作。

全域與本機設定

一般而言,建議將 bunfig.toml 檔案新增至專案根目錄,與您的 package.json 放在一起。

若要全域設定 Bun,您也可以在下列路徑之一建立 .bunfig.toml 檔案

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

如果同時偵測到全域和本機 bunfig,則結果會淺層合併,本機設定會覆寫全域設定。CLI 標記將在適用的情況下覆寫 bunfig 設定。

執行階段

Bun 的執行階段行為是使用 bunfig.toml 檔案中的最上層欄位進行設定。

preload

要在執行檔案或腳本之前執行的腳本/外掛程式陣列。

# scripts to run before `bun run`-ing a file or script
# register plugins by adding them to this list
preload = ["./preload.ts"]

jsx

設定 Bun 如何處理 JSX。您也可以在 tsconfig.jsoncompilerOptions 中設定這些欄位,但為了非 TypeScript 專案,此處也支援這些欄位。

jsx = "react"
jsxFactory = "h"
jsxFragment = "Fragment"
jsxImportSource = "react"

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

smol

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

# Reduce memory usage at the cost of performance
smol = true

logLevel

設定日誌等級。可以是 "debug""warn""error" 其中之一。

logLevel = "debug" # "debug" | "warn" | "error"

define

define 欄位可讓您將特定的全域識別碼替換為常數運算式。Bun 會將任何識別碼的使用替換為運算式。運算式應為 JSON 字串。

[define]
# Replace any usage of "process.env.bagel" with the string `lox`.
# The values are parsed as JSON, except single-quoted strings are supported and `'undefined'` becomes `undefined` in JS.
# This will probably change in a future release to be just regular TOML instead. It is a holdover from the CLI argument parsing.
"process.env.bagel" = "'lox'"

loader

設定 Bun 如何將檔案副檔名對應至載入器。這對於載入 Bun 原生不支援的檔案很有用。如果

[loader]
# when a .bagel file is imported, treat it like a tsx file
".bagel" = "tsx"

Bun 支援下列載入器

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

telemetry

telemetry 欄位允許啟用/停用分析記錄。Bun 會記錄捆綁時間(以便我們可以用數據回答「Bun 是否變得更快?」)和功能使用情況(例如,「人們真的在使用巨集嗎?」)。請求主體大小約為 60 個位元組,因此數據量不大。預設情況下,遙測功能已啟用。相當於 DO_NOT_TRACK 環境變數。

telemetry = false

測試執行器

測試執行器在 bunfig.toml 的 [test] 區段下設定。

[test]
# configuration goes here

test.root

從哪個根目錄執行測試。預設值為 .

[test]
root = "./__tests__"

test.preload

與最上層 preload 欄位相同,但僅適用於 bun test

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

test.smol

與最上層 smol 欄位相同,但僅適用於 bun test

[test]
smol = true

test.coverage

啟用覆蓋率報告。預設值為 false。使用 --coverage 覆寫。

[test]
coverage = false

test.coverageThreshold

指定覆蓋率閾值。預設情況下,未設定閾值。如果您的測試套件未達到或超過此閾值,bun test 將以非零的結束代碼退出,以指示失敗。

[test]

# to require 90% line-level and function-level coverage
coverageThreshold = 0.9

可以為逐行、逐函數和逐語句覆蓋率指定不同的閾值。

[test]
coverageThreshold = { line = 0.7, function = 0.8, statement = 0.9 }

test.coverageSkipTestFiles

在計算覆蓋率統計資訊時是否跳過測試檔案。預設值為 false

[test]
coverageSkipTestFiles = false

test.coverageReporter

預設情況下,覆蓋率報告將列印到主控台。對於 CI 環境中的持久程式碼覆蓋率報告以及其他工具,請使用 lcov

[test]
coverageReporter  = ["text", "lcov"]  # default ["text"]

test.coverageDir

設定將儲存覆蓋率報告的路徑。請注意,這僅適用於持久 coverageReporter,如 lcov

[test]
coverageDir = "path/to/somewhere"  # default "coverage"

套件管理器

套件管理是一個複雜的問題;為了支援各種使用案例,bun install 的行為可以在 [install] 區段下設定。

[install]
# configuration here

install.optional

是否安裝選用相依性。預設值為 true

[install]
optional = true

install.dev

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

[install]
dev = true

install.peer

是否安裝同級相依性。預設值為 true

[install]
peer = true

install.production

bun install 是否將在「生產模式」下執行。預設值為 false

在生產模式下,不會安裝 "devDependencies"。您可以在 CLI 中使用 --production 來覆寫此設定。

[install]
production = false

install.exact

是否在 package.json 中設定確切的版本。預設值為 false

預設情況下,Bun 使用插入號範圍;如果套件的 latest 版本為 2.4.1,則您的 package.json 中的版本範圍將為 ^2.4.1。這表示從 2.4.1 到(但不包含)3.0.0 的任何版本都是可接受的。

[install]
exact = false

install.saveTextLockfile

如果為 false,則在執行 bun install 且沒有鎖定檔時,產生二進位 bun.lockb 而不是基於文字的 bun.lock 檔案。

預設值為 true(自 Bun v1.2 起)。

[install]
saveTextLockfile = false

install.auto

設定 Bun 的套件自動安裝行為。預設值為 "auto" — 當找不到 node_modules 資料夾時,Bun 將在執行期間動態自動安裝相依性。

[install]
auto = "auto"

有效值為

描述
"auto"如果本機 node_modules 存在,則從中解析模組。否則,動態自動安裝相依性。
"force"始終自動安裝相依性,即使 node_modules 存在。
"disable"永不自動安裝相依性。
"fallback"先檢查本機 node_modules,然後自動安裝任何找不到的套件。您可以使用 CLI 中的 bun -i 啟用此功能。

install.frozenLockfile

如果為 true,則 bun install 將不會更新 bun.lock。預設值為 false。如果 package.json 和現有的 bun.lock 不一致,則會發生錯誤。

[install]
frozenLockfile = false

install.dryRun

bun install 是否將實際安裝相依性。預設值為 false。如果為 true,則相當於在所有 bun install 命令上設定 --dry-run

[install]
dryRun = false

install.globalDir

設定 Bun 放置全域安裝套件的目錄。

[install]
# where `bun install --global` installs packages
globalDir = "~/.bun/install/global"

install.globalBinDir

設定 Bun 安裝全域安裝的二進位檔案和 CLI 的目錄。

# where globally-installed package bins are linked
globalBinDir = "~/.bun/bin"

install.registry

預設登錄檔為 https://registry.npmjs.org/。這可以在 bunfig.toml 中全域設定

[install]
# set default registry as a string
registry = "https://registry.npmjs.org"
# set a token
registry = { url = "https://registry.npmjs.org", token = "123456" }
# set a username/password
registry = "https://username:password@registry.npmjs.org"

install.scopes

若要為特定範圍(例如 @myorg/<package>)設定登錄檔,請使用 install.scopes。您可以使用 $variable 標記法參考環境變數。

[install.scopes]
# registry as string
myorg = "https://username:password@registry.myorg.com/"

# registry with username/password
# you can reference environment variables
myorg = { username = "myusername", password = "$npm_password", url = "https://registry.myorg.com/" }

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

install.cainstall.cafile

若要設定 CA 憑證,請使用 install.cainstall.cafile 指定 CA 憑證檔案的路徑。

[install]
# The CA certificate as a string
ca = "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----"

# A path to a CA certificate file. The file can contain multiple certificates.
cafile = "path/to/cafile"

install.cache

設定快取行為

[install.cache]

# the directory to use for the cache
dir = "~/.bun/install/cache"

# when true, don't load from the global cache.
# Bun may still write to node_modules/.cache
disable = false

# when true, always resolve the latest versions from the registry
disableManifest = false

install.lockfile

若要設定鎖定檔行為,請使用 install.lockfile 區段。

是否在 bun install 上產生鎖定檔。預設值為 true

[install.lockfile]
save = true

是否在 bun.lock 旁邊產生非 Bun 鎖定檔。(將始終建立 bun.lock。)目前,"yarn" 是唯一支援的值。

[install.lockfile]
print = "yarn"

bun run

bun run 命令可以在 [run] 區段下設定。這些設定適用於 bun run 命令以及執行檔案、可執行檔或腳本時的 bun 命令。

目前,bunfig.toml 並非總是針對本機專案中的 bun run 自動載入(它會檢查全域 bunfig.toml),因此您可能仍然需要傳遞 -c-c=bunfig.toml 才能使用這些設定。

run.shell - 使用系統 Shell 或 Bun 的 Shell

透過 bun runbun 執行 package.json 腳本時要使用的 shell。在 Windows 上,預設值為 "bun",在其他平台上,預設值為 "system"

始終使用系統 shell 而不是 Bun 的 shell(除非 Windows,否則為預設行為)

[run]
# default outside of Windows
shell = "system"

始終使用 Bun 的 shell 而不是系統 shell

[run]
# default on Windows
shell = "bun"

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

如果為 true,這會為 bun runbun 呼叫的所有腳本或可執行檔,在 $PATH 前面加上一個指向 bun 二進位檔案的 node 符號連結。

這表示如果您有一個執行 node 的腳本,它實際上會執行 bun,而無需變更您的腳本。這會遞迴運作,因此如果您的腳本執行另一個執行 node 的腳本,它也會執行 bun。這也適用於 shebang,因此如果您有一個 shebang 指向 node 的腳本,它實際上會執行 bun

預設情況下,如果 node 尚未在您的 $PATH 中,則會啟用此功能。

[run]
# equivalent to `bun --bun` for all `bun run` commands
bun = true

您可以透過執行以下命令來測試此功能

bun --bun which node # /path/to/bun
bun which node # /path/to/node

此選項相當於在所有 bun run 命令前面加上 --bun

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

如果設定為 false,這將停用 node 符號連結。

run.silent - 抑制報告正在執行的命令

如果為 true,則會抑制 bun runbun 輸出的正在執行的命令。

[run]
silent = true

如果沒有此選項,正在執行的命令將列印到主控台

bun run dev
$ echo "Running \"dev\"..."
Running "dev"...

使用此選項,正在執行的命令將不會列印到主控台

bun run dev
Running "dev"...

這相當於將 --silent 傳遞給所有 bun run 命令

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