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
# Using CMD
set FOO=helloworld && bun run dev
# Using PowerShell
$env:FOO="helloworld"; bun run dev
適用於 Windows 的跨平台解決方案
或者以程式化的方式,透過將屬性賦予 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
引號
Bun 支援雙引號、單引號和模板字面反引號
FOO='hello'
FOO="hello"
FOO=`hello`
展開
環境變數會自動展開。這表示您可以在環境變數中參考先前定義的變數。
FOO=world
BAR=hello$FOO
process.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\$FOO
process.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 ,則自動上傳崩潰報告和遙測數據都會被停用。 |
執行時期轉譯器快取
對於大於 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 的原始碼檔案的轉譯輸出。
- 檔案轉譯輸出的來源地圖
檔案副檔名 .pile
用於這些快取檔案。