Skip to content

Bun liest Ihre .env-Dateien automatisch und bietet idiomatische Möglichkeiten, Ihre Umgebungsvariablen programmatisch zu lesen und zu schreiben. Außerdem können einige Aspekte von Buns Laufzeitverhalten mit Bun-spezifischen Umgebungsvariablen konfiguriert werden.

Umgebungsvariablen festlegen

Bun liest die folgenden Dateien automatisch (in aufsteigender Reihenfolge der Priorität aufgeführt).

  • .env
  • .env.production, .env.development, .env.test (abhängig vom Wert von NODE_ENV)
  • .env.local
ini
FOO=hello
BAR=world

Variablen können auch über die Kommandozeile gesetzt werden.

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

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

Cross-Platform-Lösung mit Windows

Für eine plattformübergreifende Lösung können Sie bun shell verwenden. Zum Beispiel den bun exec-Befehl.

sh
bun exec 'FOO=helloworld bun run dev'

Unter Windows verwenden package.json-Skripte, die mit bun run aufgerufen werden, automatisch die bun shell, was das Folgende ebenfalls plattformübergreifend macht.

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

Oder programmatisch durch Zuweisen einer Eigenschaft an process.env.

ts
process.env.FOO = "hello";

Manuelles Angeben von .env-Dateien

Bun unterstützt --env-file, um zu überschreiben, welche spezifische .env-Datei geladen werden soll. Sie können --env-file verwenden, wenn Sie Skripte in Buns Laufzeit ausführen oder wenn Sie package.json-Skripte ausführen.

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

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

Deaktivieren des automatischen .env-Ladens

Verwenden Sie --no-env-file, um Buns automatisches .env-Datei-Laden zu deaktivieren. Dies ist nützlich in Produktionsumgebungen oder CI/CD-Pipelines, in denen Sie sich ausschließlich auf System-Umgebungsvariablen verlassen möchten.

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

Dies kann auch in bunfig.toml konfiguriert werden:

toml
# Laden von .env-Dateien deaktivieren
env = false

Explizit bereitgestellte Umgebungsdateien über --env-file werden weiterhin geladen, auch wenn das Standardladen deaktiviert ist.


Anführungszeichen

Bun unterstützt doppelte Anführungszeichen, einfache Anführungszeichen und Template-Literal-Backticks:

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

Expansion

Umgebungsvariablen werden automatisch expandiert. Das bedeutet, dass Sie zuvor definierte Variablen in Ihren Umgebungsvariablen referenzieren können.

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

Dies ist nützlich zum Erstellen von Verbindungszeichenfolgen oder anderen zusammengesetzten Werten.

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

Dies kann deaktiviert werden, indem das $ mit einem Backslash escape wird.

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

dotenv

Im Allgemeinen werden Sie dotenv oder dotenv-expand nicht mehr benötigen, da Bun .env-Dateien automatisch liest.

Umgebungsvariablen lesen

Auf die aktuellen Umgebungsvariablen kann über process.env zugegriffen werden.

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

Bun stellt diese Variablen auch über Bun.env und import.meta.env bereit, was ein einfacher Alias für process.env ist.

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

Um alle aktuell gesetzten Umgebungsvariablen auf der Kommandozeile auszugeben, führen Sie bun --print process.env aus. Dies ist nützlich zum Debuggen.

sh
bun --print process.env
BAZ=stuff
FOOBAR=aaaaaa
<viele weitere Zeilen>

TypeScript

In TypeScript sind alle Eigenschaften von process.env als string | undefined typisiert.

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

Um Autovervollständigung zu erhalten und TypeScript mitzuteilen, dass eine Variable als nicht-optionale Zeichenfolge behandelt werden soll, verwenden wir Interface Merging.

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

Fügen Sie diese Zeile zu einer beliebigen Datei in Ihrem Projekt hinzu. Sie fügt global die AWESOME-Eigenschaft zu process.env und Bun.env hinzu.

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

Bun konfigurieren

Diese Umgebungsvariablen werden von Bun gelesen und konfigurieren Aspekte seines Verhaltens.

NameBeschreibung
NODE_TLS_REJECT_UNAUTHORIZEDNODE_TLS_REJECT_UNAUTHORIZED=0 deaktiviert die SSL-Zertifikatsvalidierung. Dies ist nützlich für Tests und Debugging, aber Sie sollten sehr zögerlich sein, dies in der Produktion zu verwenden. Hinweis: Diese Umgebungsvariable wurde ursprünglich von Node.js eingeführt und wir haben den Namen aus Kompatibilitätsgründen beibehalten.
BUN_CONFIG_VERBOSE_FETCHWenn BUN_CONFIG_VERBOSE_FETCH=curl, dann protokollieren fetch-Anfragen die URL, Methode, Anfrage-Header und Antwort-Header in der Konsole. Dies ist nützlich zum Debuggen von Netzwerkanfragen. Dies funktioniert auch mit node:http. BUN_CONFIG_VERBOSE_FETCH=1 ist äquivalent zu BUN_CONFIG_VERBOSE_FETCH=curl, außer ohne die curl-Ausgabe.
BUN_RUNTIME_TRANSPILER_CACHE_PATHDer Laufzeit-Transpiler cached die transpilierte Ausgabe von Quelldateien, die größer als 50 KB sind. Dies macht CLIs, die Bun verwenden, schneller beim Laden. Wenn BUN_RUNTIME_TRANSPILER_CACHE_PATH gesetzt ist, cached der Laufzeit-Transpiler die transpilierte Ausgabe in das angegebene Verzeichnis. Wenn BUN_RUNTIME_TRANSPILER_CACHE_PATH auf eine leere Zeichenfolge oder die Zeichenfolge "0" gesetzt ist, cached der Laufzeit-Transpiler die transpilierte Ausgabe nicht. Wenn BUN_RUNTIME_TRANSPILER_CACHE_PATH nicht gesetzt ist, cached der Laufzeit-Transpiler die transpilierte Ausgabe in das plattformspezifische Cache-Verzeichnis.
TMPDIRBun benötigt gelegentlich ein Verzeichnis zum Speichern von Zwischenassets während des Bündelns oder anderer Vorgänge. Wenn nicht gesetzt, wird standardmäßig das plattformspezifische temporäre Verzeichnis verwendet: /tmp unter Linux, /private/tmp unter macOS.
NO_COLORWenn NO_COLOR=1, dann ist die ANSI-Farbausgabe deaktiviert.
FORCE_COLORWenn FORCE_COLOR=1, dann ist die ANSI-Farbausgabe zwangsweise aktiviert, auch wenn NO_COLOR gesetzt ist.
BUN_CONFIG_MAX_HTTP_REQUESTSSteuert die maximale Anzahl gleichzeitiger HTTP-Anfragen, die von fetch und bun install gesendet werden. Standardwert ist 256. Wenn Sie auf Ratenbegrenzungen oder Verbindungsprobleme stoßen, können Sie diese Zahl reduzieren.
BUN_CONFIG_NO_CLEAR_TERMINAL_ON_RELOADWenn BUN_CONFIG_NO_CLEAR_TERMINAL_ON_RELOAD=true, dann löscht bun --watch die Konsole beim Neuladen nicht
DO_NOT_TRACKDeaktiviert das Hochladen von Absturzberichten an bun.report bei einem Absturz. Unter macOS und Windows ist das Hochladen von Absturzberichten standardmäßig aktiviert. Ansonsten werden Telemetriedaten ab dem 21. Mai 2024 noch nicht gesendet, aber wir planen, Telemetrie in den kommenden Wochen hinzuzufügen. Wenn DO_NOT_TRACK=1, sind sowohl das automatische Hochladen von Absturzberichten als auch Telemetrie deaktiviert.
BUN_OPTIONSFügt Befehlszeilenargumente vor jede Bun-Ausführung ein. Zum Beispiel macht BUN_OPTIONS="--hot" aus bun run dev ein Verhalten wie bun --hot run dev

Laufzeit-Transpiler-Caching

Für Dateien, die größer als 50 KB sind, cached Bun die transpilierte Ausgabe in $BUN_RUNTIME_TRANSPILER_CACHE_PATH oder das plattformspezifische Cache-Verzeichnis. Dies macht CLIs, die Bun verwenden, schneller beim Laden.

Dieser Transpiler-Cache ist global und wird über alle Projekte hinweg geteilt. Es ist sicher, den Cache jederzeit zu löschen. Es ist ein inhaltsadressierbarer Cache, sodass er niemals doppelte Einträge enthält. Es ist auch sicher, den Cache zu löschen, während ein Bun-Prozess läuft.

Es wird empfohlen, diesen Cache zu deaktivieren, wenn Sie ephemere Dateisysteme wie Docker verwenden. Buns Docker-Images deaktivieren diesen Cache automatisch.

Den Laufzeit-Transpiler-Cache deaktivieren

Um den Laufzeit-Transpiler-Cache zu deaktivieren, setzen Sie BUN_RUNTIME_TRANSPILER_CACHE_PATH auf eine leere Zeichenfolge oder die Zeichenfolge "0".

sh
BUN_RUNTIME_TRANSPILER_CACHE_PATH=0 bun run dev

Was wird gecached?

Es cached:

  • Die transpilierte Ausgabe von Quelldateien, die größer als 50 KB sind.
  • Die Sourcemap für die transpilierte Ausgabe der Datei

Die Dateierweiterung .pile wird für diese gecachten Dateien verwendet.

Bun von www.bunjs.com.cn bearbeitet