Bun

環境變數

Bun 會自動讀取您的 .env 檔案,並提供慣用的方式以程式化的方式讀取和寫入您的環境變數。此外,Bun 執行時期的某些行為可以使用 Bun 特有的環境變數進行配置。

設定環境變數

Bun 會自動讀取以下檔案 (依優先順序排列)。

  • .env
  • .env.production, .env.development, .env.test (取決於 NODE_ENV 的值)
  • .env.local
.env
FOO=hello
BAR=world

變數也可以透過命令列設定。

Linux/macOS
Windows
Linux/macOS
FOO=helloworld bun run dev
Windows
# 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 支援雙引號、單引號和模板字面反引號

.env
FOO='hello'
FOO="hello"
FOO=`hello`

展開

環境變數會自動展開。這表示您可以在環境變數中參考先前定義的變數。

.env
FOO=world
BAR=hello$FOO
process.env.BAR; // => "helloworld"

這對於建構連線字串或其他複合值很有用。

.env
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

這可以透過使用反斜線跳脫 $ 來停用。

.env
FOO=world
BAR=hello\$FOO
process.env.BAR; // => "hello$FOO"

dotenv

一般來說,您不再需要 dotenvdotenv-expand,因為 Bun 會自動讀取 .env 檔案。

讀取環境變數

目前的環境變數可以透過 process.env 存取。

process.env.API_TOKEN; // => "secret"

Bun 也透過 Bun.envimport.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.envBun.env

process.env.AWESOME; // => string

配置 Bun

這些環境變數由 Bun 讀取,並配置其行為的各個方面。

名稱描述
NODE_TLS_REJECT_UNAUTHORIZEDNODE_TLS_REJECT_UNAUTHORIZED=0 停用 SSL 憑證驗證。這對於測試和偵錯很有用,但您應該非常猶豫是否要在生產環境中使用它。注意:此環境變數最初由 Node.js 引入,我們保留了名稱以保持相容性。
BUN_CONFIG_VERBOSE_FETCH如果 BUN_CONFIG_VERBOSE_FETCH=curl,則 fetch 請求會將 URL、方法、請求標頭和回應標頭記錄到主控台。這對於偵錯網路請求很有用。這也適用於 node:httpBUN_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 未設定,則執行時期轉譯器會將轉譯後的輸出快取到平台特定的快取目錄。
TMPDIRBun 有時需要一個目錄來儲存捆綁或其他操作期間的中間資產。如果未設定,則預設為平台特定的暫存目錄: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 用於這些快取檔案。