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 vonNODE_ENV).env.local
FOO=hello
BAR=worldVariablen können auch über die Kommandozeile gesetzt werden.
FOO=helloworld bun run dev# Mit CMD
set FOO=helloworld && bun run dev
# Mit PowerShell
$env:FOO="helloworld"; bun run devCross-Platform-Lösung mit Windows
Für eine plattformübergreifende Lösung können Sie bun shell verwenden. Zum Beispiel den bun exec-Befehl.
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.
"scripts": {
"dev": "NODE_ENV=development bun --watch app.ts",
},Oder programmatisch durch Zuweisen einer Eigenschaft an process.env.
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.
bun --env-file=.env.1 src/index.ts
bun --env-file=.env.abc --env-file=.env.def run buildDeaktivieren 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.
bun run --no-env-file index.tsDies kann auch in bunfig.toml konfiguriert werden:
# Laden von .env-Dateien deaktivieren
env = falseExplizit 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:
FOO='hello'
FOO="hello"
FOO=`hello`Expansion
Umgebungsvariablen werden automatisch expandiert. Das bedeutet, dass Sie zuvor definierte Variablen in Ihren Umgebungsvariablen referenzieren können.
FOO=world
BAR=hello$FOOprocess.env.BAR; // => "helloworld"Dies ist nützlich zum Erstellen von Verbindungszeichenfolgen oder anderen zusammengesetzten Werten.
DB_USER=postgres
DB_PASSWORD=secret
DB_HOST=localhost
DB_PORT=5432
DB_URL=postgres://$DB_USER:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_NAMEDies kann deaktiviert werden, indem das $ mit einem Backslash escape wird.
FOO=world
BAR=hello\$FOOprocess.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.
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.
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.
bun --print process.env
BAZ=stuff
FOOBAR=aaaaaa
<viele weitere Zeilen>TypeScript
In TypeScript sind alle Eigenschaften von process.env als string | undefined typisiert.
Bun.env.whatever;
// string | undefinedUm Autovervollständigung zu erhalten und TypeScript mitzuteilen, dass eine Variable als nicht-optionale Zeichenfolge behandelt werden soll, verwenden wir Interface Merging.
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.
process.env.AWESOME; // => stringBun konfigurieren
Diese Umgebungsvariablen werden von Bun gelesen und konfigurieren Aspekte seines Verhaltens.
| Name | Beschreibung |
|---|---|
NODE_TLS_REJECT_UNAUTHORIZED | NODE_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_FETCH | Wenn 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_PATH | Der 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. |
TMPDIR | Bun 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_COLOR | Wenn NO_COLOR=1, dann ist die ANSI-Farbausgabe deaktiviert. |
FORCE_COLOR | Wenn FORCE_COLOR=1, dann ist die ANSI-Farbausgabe zwangsweise aktiviert, auch wenn NO_COLOR gesetzt ist. |
BUN_CONFIG_MAX_HTTP_REQUESTS | Steuert 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_RELOAD | Wenn BUN_CONFIG_NO_CLEAR_TERMINAL_ON_RELOAD=true, dann löscht bun --watch die Konsole beim Neuladen nicht |
DO_NOT_TRACK | Deaktiviert 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_OPTIONS | Fü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".
BUN_RUNTIME_TRANSPILER_CACHE_PATH=0 bun run devWas 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.