Bun 會自動讀取你的 .env 文件,並提供符合習慣的方法來以編程方式讀取和寫入環境變量。此外,Bun 運行時行為的某些方面可以使用 Bun 特定的環境變量進行配置。
設置環境變量
Bun 會自動讀取以下文件(按優先級遞增順序列出)。
.env.env.production、.env.development、.env.test(取決於NODE_ENV的值).env.local
FOO=hello
BAR=world變量也可以通過命令行設置。
FOO=helloworld bun run dev# 使用 CMD
set FOO=helloworld && bun run dev
# 使用 PowerShell
$env:FOO="helloworld"; bun run devWindows 的跨平台解決方案
對於跨平台解決方案,你可以使用 bun shell。例如,bun exec 命令。
bun exec 'FOO=helloworld bun run dev'在 Windows 上,使用 bun run 調用的 package.json 腳本將自動使用 bun shell,使以下內容也是跨平台的。
"scripts": {
"dev": "NODE_ENV=development bun --watch app.ts",
},或者通過為 process.env 分配屬性以編程方式設置。
process.env.FOO = "hello";手動指定 .env 文件
Bun 支持 --env-file 來覆蓋要加載的特定 .env 文件。你可以在 Bun 運行時運行腳本或運行 package.json 腳本時使用 --env-file。
bun --env-file=.env.1 src/index.ts
bun --env-file=.env.abc --env-file=.env.def run build禁用自動 .env 加載
使用 --no-env-file 禁用 Bun 的自動 .env 文件加載。這在你希望僅依賴系統環境變量的生產環境或 CI/CD 管道中很有用。
bun run --no-env-file index.ts這也可以在 bunfig.toml 中配置:
# 禁用加載 .env 文件
env = false即使禁用了默認加載,通過 --env-file 顯式提供的環境文件仍將被加載。
引號
Bun 支持雙引號、單引號和模板字面量反引號:
FOO='hello'
FOO="hello"
FOO=`hello`展開
環境變量會自動 展開。這意味著你可以在環境變量中引用先前定義的變量。
FOO=world
BAR=hello$FOOprocess.env.BAR; // => "helloworld"這對於構造連接字符串或其他復合值很有用。
DB_USER=postgres
DB_PASSWORD=secret
DB_HOST=localhost
DB_PORT=5432
DB_URL=postgres://$DB_USER:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_NAME這可以通過用反斜槓轉義 $ 來禁用。
FOO=world
BAR=hello\$FOOprocess.env.BAR; // => "hello$FOO"dotenv
一般來說,你不再需要 dotenv 或 dotenv-expand,因為 Bun 會自動讀取 .env 文件。
讀取環境變量
當前環境變量可以通過 process.env 訪問。
process.env.API_TOKEN; // => "secret"Bun 還通過 Bun.env 和 import.meta.env 公開這些變量,這是 process.env 的簡單別名。
Bun.env.API_TOKEN; // => "secret"
import.meta.env.API_TOKEN; // => "secret"要將所有當前設置的環境變量打印到命令行,運行 bun --print process.env。這對於調試很有用。
bun --print process.env
BAZ=stuff
FOOBAR=aaaaaa
<lots more lines>TypeScript
在 TypeScript 中,process.env 的所有屬性都類型為 string | undefined。
Bun.env.whatever;
// string | undefined要獲得自動補全並告訴 TypeScript 將變量視為非可選字符串,我們將使用 接口合並。
declare module "bun" {
interface Env {
AWESOME: string;
}
}將此行添加到項目中的任何文件。它將全局添加 AWESOME 屬性到 process.env 和 Bun.env。
process.env.AWESOME; // => string配置 Bun
這些環境變量由 Bun 讀取並配置其行為的各個方面。
| 名稱 | 描述 |
|---|---|
NODE_TLS_REJECT_UNAUTHORIZED | NODE_TLS_REJECT_UNAUTHORIZED=0 禁用 SSL 證書驗證。這對於測試和調試很有用,但你應該非常謹慎在生產中使用。注意:此環境變量最初由 Node.js 引入,我們為了兼容性保留了名稱。 |
BUN_CONFIG_VERBOSE_FETCH | 如果 BUN_CONFIG_VERBOSE_FETCH=curl,則 fetch 請求會將 url、方法、請求頭和響應頭記錄到控制台。這對於調試網絡請求很有用。這也適用於 node:http。BUN_CONFIG_VERBOSE_FETCH=1 等同於 BUN_CONFIG_VERBOSE_FETCH=curl,只是沒有 curl 輸出。 |
BUN_RUNTIME_TRANSPILER_CACHE_PATH | 運行時轉譯器緩存大於 50 KB 的源文件的轉譯輸出。這使得使用 Bun 的 CLI 加載更快。如果設置了 BUN_RUNTIME_TRANSPILER_CACHE_PATH,則運行時轉譯器將轉譯輸出緩存到指定目錄。如果 BUN_RUNTIME_TRANSPILER_CACHE_PATH 設置為空字符串或字符串 "0",則運行時轉譯器將不緩存轉譯輸出。如果未設置 BUN_RUNTIME_TRANSPILER_CACHE_PATH,則運行時轉譯器將轉譯輸出緩存到平台特定的緩存目錄。 |
TMPDIR | Bun 偶爾需要目錄來存儲在捆綁或其他操作期間的中間資產。如果未設置,默認為平台特定的臨時目錄:Linux 上為 /tmp,macOS 上為 /private/tmp。 |
NO_COLOR | 如果 NO_COLOR=1,則 ANSI 顏色輸出 被禁用。 |
FORCE_COLOR | 如果 FORCE_COLOR=1,則 ANSI 顏色輸出強制啟用,即使設置了 NO_COLOR。 |
BUN_CONFIG_MAX_HTTP_REQUESTS | 控制 fetch 和 bun install 發送的並發 HTTP 請求的最大數量。默認為 256。如果你遇到速率限制或連接問題,可以減少此數字。 |
BUN_CONFIG_NO_CLEAR_TERMINAL_ON_RELOAD | 如果 BUN_CONFIG_NO_CLEAR_TERMINAL_ON_RELOAD=true,則 bun --watch 在重新加載時不會清除控制台 |
DO_NOT_TRACK | 禁用崩潰時上傳崩潰報告到 bun.report。在 macOS 和 Windows 上,默認啟用崩潰報告上傳。否則,截至 2024 年 5 月 21 日,遙測尚未發送,但我們計劃在未來幾周內添加遙測。如果 DO_NOT_TRACK=1,則自動上傳崩潰報告和遙測都 被禁用。 |
BUN_OPTIONS | 將命令行參數前置到任何 Bun 執行。例如,BUN_OPTIONS="--hot" 使 bun run dev 行為像 bun --hot run dev |
運行時轉譯器緩存
對於大於 50 KB 的文件,Bun 將轉譯輸出緩存到 $BUN_RUNTIME_TRANSPILER_CACHE_PATH 或平台特定的緩存目錄。這使得使用 Bun 的 CLI 加載更快。
此轉譯器緩存是全局的,在所有項目之間共享。隨時刪除緩存是安全的。它是一個內容可尋址緩存,因此永遠不會包含重復條目。在 Bun 進程運行時刪除緩存也是安全的。
建議在使用 Docker 等臨時文件系統時禁用此緩存。Bun 的 Docker 鏡像自動禁用此緩存。
禁用運行時轉譯器緩存
要禁用運行時轉譯器緩存,將 BUN_RUNTIME_TRANSPILER_CACHE_PATH 設置為空字符串或字符串 "0"。
BUN_RUNTIME_TRANSPILER_CACHE_PATH=0 bun run dev它緩存什麼?
它緩存:
- 大於 50 KB 的源文件的轉譯輸出。
- 文件轉譯輸出的 source map
這些緩存文件使用 .pile 擴展名。