Skip to content

Bun legge automaticamente i tuoi file .env e fornisce modi idiomatici per leggere e scrivere le tue variabili d'ambiente a livello di codice. Inoltre, alcuni aspetti del comportamento runtime di Bun possono essere configurati con variabili d'ambiente specifiche di Bun.

Impostare le variabili d'ambiente

Bun legge automaticamente i seguenti file (elencati in ordine di precedenza crescente).

  • .env
  • .env.production, .env.development, .env.test (a seconda del valore di NODE_ENV)
  • .env.local
ini
FOO=hello
BAR=world

Le variabili possono anche essere impostate tramite la riga di comando.

sh
FOO=helloworld bun run dev
sh
# Usando CMD
set FOO=helloworld && bun run dev

# Usando PowerShell
$env:FOO="helloworld"; bun run dev

Soluzione cross-platform con Windows

Per una soluzione cross-platform, puoi usare bun shell. Ad esempio, il comando bun exec.

sh
bun exec 'FOO=helloworld bun run dev'

Su Windows, gli script package.json chiamati con bun run useranno automaticamente la bun shell, rendendo anche quanto segue cross-platform.

json
"scripts": {
  "dev": "NODE_ENV=development bun --watch app.ts",
}

Oppure a livello di codice assegnando una proprietà a process.env.

ts
process.env.FOO = "hello";

Specificare manualmente i file .env

Bun supporta --env-file per sovrascrivere quale specifico file .env caricare. Puoi usare --env-file quando esegui script nel runtime di bun, o quando esegui script package.json.

sh
bun --env-file=.env.1 src/index.ts

bun --env-file=.env.abc --env-file=.env.def run build

Disabilitare il caricamento automatico .env

Usa --no-env-file per disabilitare il caricamento automatico dei file .env di Bun. Questo è utile in ambienti di produzione o pipeline CI/CD dove vuoi affidarti esclusivamente alle variabili d'ambiente di sistema.

sh
bun run --no-env-file index.ts

Questo può anche essere configurato in bunfig.toml:

toml
# Disabilita il caricamento dei file .env
env = false

I file di ambiente forniti esplicitamente tramite --env-file verranno comunque caricati anche quando il caricamento predefinito è disabilitato.


Virgolette

Bun supporta virgolette doppie, virgolette singole e backtick per i template literal:

ini
FOO='hello'
FOO="hello"
FOO=`hello`

Espansione

Le variabili d'ambiente vengono automaticamente espans. Questo significa che puoi fare riferimento a variabili definite in precedenza nelle tue variabili d'ambiente.

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

Questo è utile per costruire stringhe di connessione o altri valori composti.

ini
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

Questo può essere disabilitato escapando il $ con un backslash.

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

dotenv

In generale, non avrai più bisogno di dotenv o dotenv-expand, perché Bun legge automaticamente i file .env.

Leggere le variabili d'ambiente

Le variabili d'ambiente correnti possono essere accessate tramite process.env.

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

Bun espone anche queste variabili tramite Bun.env e import.meta.env, che è un semplice alias di process.env.

ts
Bun.env.API_TOKEN; // => "secret"
import.meta.env.API_TOKEN; // => "secret"

Per stampare tutte le variabili d'ambiente attualmente impostate sulla riga di comando, esegui bun --print process.env. Questo è utile per il debug.

sh
bun --print process.env
BAZ=stuff
FOOBAR=aaaaaa
<molte altre righe>

TypeScript

In TypeScript, tutte le proprietà di process.env sono tipizzate come string | undefined.

ts
Bun.env.whatever;
// string | undefined

Per ottenere l'autocompletamento e dire a TypeScript di trattare una variabile come una stringa non opzionale, useremo il merge di interfacce.

ts
declare module "bun" {
  interface Env {
    AWESOME: string;
  }
}

Aggiungi questa riga a qualsiasi file nel tuo progetto. Aggiungerà globalmente la proprietà AWESOME a process.env e Bun.env.

ts
process.env.AWESOME; // => string

Configurare Bun

Queste variabili d'ambiente vengono lette da Bun e configurano aspetti del suo comportamento.

NomeDescrizione
NODE_TLS_REJECT_UNAUTHORIZEDNODE_TLS_REJECT_UNAUTHORIZED=0 disabilita la validazione del certificato SSL. Questo è utile per test e debug, ma dovresti essere molto esitante nell'usarlo in produzione. Nota: Questa variabile d'ambiente è stata originariamente introdotta da Node.js e abbiamo mantenuto il nome per compatibilità.
BUN_CONFIG_VERBOSE_FETCHSe BUN_CONFIG_VERBOSE_FETCH=curl, allora le richieste fetch registreranno url, metodo, header di request e header di response sulla console. Questo è utile per il debug delle richieste di rete. Funziona anche con node:http. BUN_CONFIG_VERBOSE_FETCH=1 è equivalente a BUN_CONFIG_VERBOSE_FETCH=curl tranne che senza l'output curl.
BUN_RUNTIME_TRANSPILER_CACHE_PATHIl transpiler runtime memorizza nella cache l'output transpilato di file sorgente più grandi di 50 kb. Questo fa sì che le CLI che usano Bun si carichino più velocemente. Se BUN_RUNTIME_TRANSPILER_CACHE_PATH è impostato, allora il transpiler runtime memorizzerà nella cache l'output transpilato nella directory specificata. Se BUN_RUNTIME_TRANSPILER_CACHE_PATH è impostato su una stringa vuota o la stringa "0", allora il transpiler runtime non memorizzerà nella cache l'output transpilato. Se BUN_RUNTIME_TRANSPILER_CACHE_PATH non è impostato, allora il transpiler runtime memorizzerà nella cache l'output transpilato nella directory cache specifica della piattaforma.
TMPDIRBun occasionalmente richiede una directory per memorizzare asset intermedi durante il bundling o altre operazioni. Se non impostato, usa la directory temporanea specifica della piattaforma: /tmp su Linux, /private/tmp su macOS.
NO_COLORSe NO_COLOR=1, allora l'output colore ANSI è disabilitato.
FORCE_COLORSe FORCE_COLOR=1, allora l'output colore ANSI è forzatamente abilitato, anche se NO_COLOR è impostato.
BUN_CONFIG_MAX_HTTP_REQUESTSControlla il numero massimo di richieste HTTP concorrenti inviate da fetch e bun install. Il default è 256. Se incontri limiti di frequenza o problemi di connessione, puoi ridurre questo numero.
BUN_CONFIG_NO_CLEAR_TERMINAL_ON_RELOADSe BUN_CONFIG_NO_CLEAR_TERMINAL_ON_RELOAD=true, allora bun --watch non pulirà la console al ricaricamento
DO_NOT_TRACKDisabilita il caricamento dei report di crash su bun.report in caso di crash. Su macOS e Windows, i caricamenti dei report di crash sono abilitati di default. Altrimenti, la telemetria non viene ancora inviata a partire dal 21 maggio 2024, ma stiamo pianificando di aggiungere la telemetria nelle prossime settimane. Se DO_NOT_TRACK=1, allora il caricamento automatico dei report di crash e la telemetria sono entrambi disabilitati.
BUN_OPTIONSAnteponi argomenti da riga di comando a qualsiasi esecuzione di Bun. Ad esempio, BUN_OPTIONS="--hot" fa sì che bun run dev si comporti come bun --hot run dev

Cache del transpiler runtime

Per file più grandi di 50 KB, Bun memorizza nella cache l'output transpilato in $BUN_RUNTIME_TRANSPILER_CACHE_PATH o nella directory cache specifica della piattaforma. Questo fa sì che le CLI che usano Bun si carichino più velocemente.

Questa cache del transpiler è globale e condivisa tra tutti i progetti. È sicuro eliminare la cache in qualsiasi momento. È una cache con indirizzamento per contenuto, quindi non conterrà mai voci duplicate. È anche sicuro eliminare la cache mentre un processo Bun è in esecuzione.

Si consiglia di disabilitare questa cache quando si usano filesystem effimeri come Docker. Le immagini Docker di Bun disabilitano automaticamente questa cache.

Disabilitare la cache del transpiler runtime

Per disabilitare la cache del transpiler runtime, imposta BUN_RUNTIME_TRANSPILER_CACHE_PATH su una stringa vuota o la stringa "0".

sh
BUN_RUNTIME_TRANSPILER_CACHE_PATH=0 bun run dev

Cosa memorizza nella cache?

Memorizza nella cache:

  • L'output transpilato di file sorgente più grandi di 50 KB.
  • La sourcemap per l'output transpilato del file

L'estensione del file .pile è usata per questi file memorizzati nella cache.

Bun a cura di www.bunjs.com.cn