Env Variablen Und Modi
VITE enthüllt bestimmte Konstanten im Rahmen des speziellen import.meta.env -Objekts. Diese Konstanten werden während des Entwicklers als globale Variablen definiert und statisch zum Bauzeit ersetzt, um Baumschütteln wirksam zu machen.
Eingebaute Konstanten
Einige eingebaute Konstanten sind in allen Fällen erhältlich:
import.meta.env.MODE: {String} Der Modus , in dem die App ausgeführt wird.import.meta.env.BASE_URL: {String} Die Basis -URL Die App wird ausgestellt. Dies wird durch diebase-Konfigurationsoption bestimmt.import.meta.env.PROD: {boolean}, ob die App in der Produktion ausgeführt wird (Ausführen des Dev -Servers mitNODE_ENV='production'oder mit einer App, die mitNODE_ENV='production'erstellt wurde).import.meta.env.DEV: {boolean} Ob die App in der Entwicklung ausgeführt wird (immer das Gegenteil vonimport.meta.env.PROD)import.meta.env.SSR: {boolean} Ob die App im Server ausgeführt wird.
Env Variablen
VITE legt Env -Variablen unter import.meta.env Objekt als Zeichenfolgen automatisch frei.
Um dem Client versehentlich durch versehentlich durchgende Env-Variablen zu verhindern, sind nur Variablen, die mit VITE_ vorangestellt sind, Ihrem vite-verarbeiteten Code ausgesetzt. ZB für die folgenden Env -Variablen:
VITE_SOME_KEY=123
DB_PASSWORD=foobarNur VITE_SOME_KEY wird Ihrem Client -Quellcode als import.meta.env.VITE_SOME_KEY ausgesetzt, DB_PASSWORD jedoch nicht.
console.log(import.meta.env.VITE_SOME_KEY) // "123"
console.log(import.meta.env.DB_PASSWORD) // undefiniertWenn Sie das ENV -Variablen -Präfix anpassen möchten, finden Sie in der Option EnvPrefix .
Env parsing
Wie oben gezeigt, ist VITE_SOME_KEY eine Zahl, gibt jedoch eine Zeichenfolge zurück, wenn sie analysiert werden. Gleiches gilt auch für booleale Env -Variablen. Stellen Sie sicher, dass Sie bei Verwendung in Ihrem Code in den gewünschten Typ konvertieren.
.env Dateien
Vite verwendet DOTenV , um zusätzliche Umgebungsvariablen aus den folgenden Dateien in Ihrem Umgebungsverzeichnis zu laden:
.env # loaded in all cases
.env.local # loaded in all cases, ignored by git
.env.[mode] # only loaded in specified mode
.env.[mode].local # only loaded in specified mode, ignored by gitEnv Loading Priorities
Eine Env -Datei für einen bestimmten Modus (z. B. .env.production ) hat eine höhere Priorität als eine generische (z. B. .env ).
VITE lädt immer zusätzlich zur modusspezifischen .env.[mode] Datei .env und .env.local . Variablen .env.local die in modusspezifischen Dateien deklariert sind, haben Vorrang vor denjenigen in generischen Dateien. In .env Umgebung sind jedoch noch Variablen vorhanden.
Darüber hinaus haben Umgebungsvariablen, die bereits vorhanden sind, wenn VITE ausgeführt wird, die höchste Priorität und wird nicht durch .env Dateien überschrieben. Zum Beispiel beim Laufen VITE_SOME_KEY=123 vite build .
.env Dateien werden zu Beginn von VITE geladen. Starten Sie den Server nach Änderungen neu.
Außerdem verwendet VITE DOTENV-EXPAND , um Variablen zu erweitern, die in Env-Dateien geschrieben wurden. Um mehr über die Syntax zu erfahren, lesen Sie ihre Dokumente .
Beachten Sie, dass Sie mit \ entkommen müssen, wenn Sie $ in Ihrem Umgebungswert verwenden möchten.
KEY=123
NEW_KEY1=test$foo # test
NEW_KEY2=test\$foo # test$foo
NEW_KEY3=test$KEY # test123SECURITY NOTES
.env.*.localDateien sind nur lokal und können sensible Variablen enthalten. Sie sollten*.localzu Ihren.gitignorehinzufügen, um zu verhindern, dass sie in Git überprüft werden.Da alle Vite -Quellcode in Ihrem Client -Bundle ausgesetzt sind, sollten
VITE_*Variablen keine vertraulichen Informationen enthalten.
Expanding variables in reverse order
VITE unterstützt die Erweiterung von Variablen in umgekehrter Reihenfolge. Zum Beispiel wird die unten stehende .env als VITE_FOO=foobar , VITE_BAR=bar bewertet.
VITE_FOO=foo${VITE_BAR}
VITE_BAR=barDies funktioniert nicht in Shell -Skripten und anderen Tools wie docker-compose . Trotzdem unterstützt Vite dieses Verhalten, da dies seit langem von dotenv-expand unterstützt wurde, und andere Tools im JavaScript -Ökosystem verwenden ältere Versionen, die dieses Verhalten unterstützen.
Um Interopop -Probleme zu vermeiden, wird empfohlen, sich auf dieses Verhalten zu verlassen. VITE kann in Zukunft Warnungen für dieses Verhalten abgeben.
IntelliSense für Typenkript
Standardmäßig liefert Vite Typdefinitionen für import.meta.env in vite/client.d.ts . Während Sie mehr benutzerdefinierte Env-Variablen in .env.[mode] Dateien definieren können, sollten Sie TypeScript-IntelliSense für benutzerdefinierte Env-Variablen erhalten, die mit VITE_ vorangestellt sind.
Um dies zu erreichen, können Sie ein vite-env.d.ts -in src -Verzeichnis erstellen und dann ImportMetaEnv wie folgt erweitern:
///<reference types="vite/client">
interface ImportMetaEnv {
readonly VITE_APP_TITLE: string
// Weitere Env -Variablen ...
}
interface ImportMeta {
readonly env: ImportMetaEnv
}Wenn Ihr Code auf Typen aus Browser -Umgebungen wie DOM und Webworker beruht, können Sie das LIB -Feld in tsconfig.json aktualisieren.
{
"lib": ["WebWorker"]
}Imports will break type augmentation
Wenn die ImportMetaEnv -Augmentation nicht funktioniert, stellen Sie sicher, dass Sie in vite-env.d.ts keine import Aussagen haben. Weitere Informationen finden Sie in der Typuskript -Dokumentation .
HTML Konstante Ersatz
Vite unterstützt auch das Ersetzen von Konstanten in HTML -Dateien. Alle Eigenschaften in import.meta.env können in HTML -Dateien mit einer speziellen %CONST_NAME% -Syntax verwendet werden:
<h1>Vite is running in %MODE%</h1>
<p>Using data from %VITE_API_URL%</p>Wenn die Env in import.meta.env , z. %NON_EXISTENT% , nicht existiert, wird sie ignoriert und nicht ersetzt, im Gegensatz zu import.meta.env.NON_EXISTENT in JS, wo es als undefined ersetzt wird.
Angesichts der Tatsache, dass VITE von vielen Frameworks verwendet wird, wird es absichtlich nicht öffnen, was komplexe Ersatze wie Konditionsteile hat. VITE kann mit einem vorhandenen Userland -Plugin oder einem benutzerdefinierten Plugin erweitert werden, das den transformIndexHtml -Haken implementiert.
Modi
Standardmäßig wird der Dev Server ( dev -Befehl) im development -Modus ausgeführt und der build -Befehl wird im production -Modus ausgeführt.
Dies bedeutet, dass beim vite build -Ausführen die Env -Variablen von .env.production geladen werden, wenn es eines gibt:
VITE_APP_TITLE=My AppIn Ihrer App können Sie den Titel mit import.meta.env.VITE_APP_TITLE rendern.
In einigen Fällen möchten Sie möglicherweise vite build mit einem anderen Modus ausführen, um einen anderen Titel zu machen. Sie können den Standardmodus für einen Befehl überschreiben, indem Sie das --mode -Options -Flag übergeben. Wenn Sie beispielsweise Ihre App für einen Staging -Modus erstellen möchten:
vite build --mode stagingUnd erstellen Sie eine .env.staging -Datei:
VITE_APP_TITLE=My App (staging)Da vite build standardmäßig einen Produktionsbau ausführt, können Sie dies auch ändern und einen Entwicklungsbau mit einem anderen Modus und .env -Dateikonfiguration ausführen:
NODE_ENV=developmentNode_env und modi
Es ist wichtig zu beachten, dass NODE_ENV ( process.env.NODE_ENV ) und Modi zwei verschiedene Konzepte sind. So beeinflussen unterschiedliche Befehle die NODE_ENV und den Modus:
| Befehl | Node_env | Modus |
|---|---|---|
vite build | "production" | "production" |
vite build --mode development | "production" | "development" |
NODE_ENV=development vite build | "development" | "production" |
NODE_ENV=development vite build --mode development | "development" | "development" |
Die verschiedenen Werte von NODE_ENV und Modus spiegeln auch die entsprechenden import.meta.env Eigenschaften wider:
| Befehl | import.meta.env.PROD | import.meta.env.DEV |
|---|---|---|
NODE_ENV=production | true | false |
NODE_ENV=development | false | true |
NODE_ENV=other | false | true |
| Befehl | import.meta.env.MODE |
|---|---|
--mode production | "production" |
--mode development | "development" |
--mode staging | "staging" |
NODE_ENV in .env files
NODE_ENV=... kann im Befehl und auch in Ihrer .env -Datei eingestellt werden. Wenn NODE_ENV in einer .env.[mode] -Datei angegeben ist, kann der Modus verwendet werden, um seinen Wert zu steuern. Sowohl NODE_ENV als auch Modi bleiben jedoch zwei verschiedene Konzepte.
Der Hauptvorteil bei NODE_ENV=... im Befehl besteht darin, dass VITE den Wert frühzeitig erkennen kann. Außerdem können Sie process.env.NODE_ENV in Ihrer vite -Konfiguration lesen, da VITE die Env -Dateien nur dann laden kann, sobald die Konfiguration bewertet wird.