So laden Sie Umgebungsvariablen aus einer .env-Datei mit Vite
Lesezeit: 5 Minuten
Ich möchte Umgebungsvariablen aus laden .env Datei verwenden Vite
Ich habe das verwendet import.meta.env Objekt wie in erwähnt Dokumente
.env Datei:
TEST_VAR=123F
beim Versuch, über die auf diese Variable zuzugreifen import.meta.env -> import.meta.env.TEST_VAR es gibt undefiniert zurück.
Wie kann ich also darauf zugreifen?
Nur diejenigen mit dem Präfix VITE_ werden in Ihrem JS-/Vue-Code sichtbar sein. Überprüfen Sie deren Dokumentation vitejs.dev/guide/env-and-mode.html
– Joel Chu
28. April um 1:03
Mahmud
Entsprechend der Dokumentemüssen Sie Ihren Variablen ein Präfix voranstellen VITE_:
Um zu verhindern, dass env-Variablen versehentlich an den Client weitergegeben werden, werden Ihrem von Vite verarbeiteten Code nur Variablen mit dem Präfix VITE_ angezeigt.
Wenn Sie versuchen, auf Umgebungsvariablen außerhalb Ihres App-Quellcodes zuzugreifen (z. B. innerhalb vite.config.js), dann müssen Sie verwenden loadEnv():
import { defineConfig, loadEnv } from 'vite';
export default ({ mode }) => {
// Load app-level env vars to node-level env vars.
process.env = {...process.env, ...loadEnv(mode, process.cwd())};
return defineConfig({
// To access env vars here use process.env.TEST_VAR
});
}
Vielen Dank für das Beispiel. Ich verwende Vite mit Svelte (nicht svelteKit), um Code für Browser zu generieren, und offensichtlich habe ich die Vite-Dokumentation falsch interpretiert. Ich habe erwartet, dass .env immer automatisch eingefügt wurde, da es nicht funktioniert und LoadEnv in hinzugefügt hat config funktioniert, würde ich sagen, dass das nicht der Fall ist.
– Alex
21. August 2022 um 12:24
Die verlinkten Dokumente (vitejs.dev/guide/env-and-mode.html#env-files) erwähnen nicht die Verwendung loadEnv – Sie scheinen darauf hinzuweisen, dass die Anwesenheit von .env im Stammverzeichnis wird geladen VITE_ env vars implizit. loadEnv Scheint erforderlich zu sein, aber ich sehe es nicht in den Dokumenten. Oo Vite-Version: 3.1.4
– Larry
30. September 2022 um 19:52 Uhr
Guter Fang. Das Dokument für loadEnv (vitejs.dev/guide/api-javascript.html#loadenv) lässt erkennen, dass wir das Präfix ändern können: process.env = {...process.env, ...loadEnv(mode, process.cwd(), "VUE_")};
– AymKdn
31. Januar um 10:33
Wenn Sie auf Ihre Umgebungsvariable TEST_VAR zugreifen möchten, sollten Sie ihr das Präfix voranstellen VITE_
Versuchen Sie so etwas wie
VITE_TEST_VAR=123f
Sie können mit darauf zugreifen
import.meta.env.VITE_TEST_VAR
aber bei import.meta.env erhalte ich die Fehlermeldung, dass der Metaname nicht gefunden wird
– Héctor
9. April 2022 um 16:36 Uhr
Ich weiß nicht, warum es einen Fehler auslöst, aber // @ts-ignore in der Zeile oben hilft 🤫
In Node.js Sie können regelmäßig darauf zugreifen process.env.VITE_TEST_VAR
– Eli Zatlawy
9. April um 12:52 Uhr
Hier sind drei Fehler/Fallstricke, die mich zum Stolpern gebracht haben.
Stellen Sie sicher, dass sich die .env-Dateien im Stammverzeichnis befinden, nicht im src Verzeichnis. Der Dateiname .env und/oder .env.development funktioniert, wenn es lokal ausgeführt wird.
Starten Sie den lokalen Webserver neu, damit die Variablen angezeigt werden: npm run dev
Stellen Sie den Variablen ein Präfix voran VITE_ (wie bereits von Mahmoud und Wonkledge erwähnt)
Alternativ Einstellung envDir Option in vite.config.ts: typescript export default defineConfig({ plugins: [react()], envDir: './src/environments' })
– gut-wir
4. Oktober 2022 um 8:07 Uhr
Was mich aus der Fassung brachte, war, dass ich mir nicht bewusst war, dass ich mein eigenes geschaffen hatte .env.development Datei in der src Ordner anstelle des Stammverzeichnisses 🙈
– Bischof
3. Januar um 11:57
Beachten Sie dies, wenn in den Vite-Dokumenten erwähnt wird rootsie bedeuten den Projektstamm (d. h. wo index.html ist) und nicht der Projektordner der obersten Ebene. Dies ist nicht dasselbe, wenn Sie dies getan haben Stellen Sie die ein root Möglichkeit. @bishop Ich nehme an, dass du das hast root: "./src" Satz.
– hendalst
31. Januar um 7:48 Uhr
Ich habe gerade zwei Stunden verschwendet, weil sich meine env-Datei außerhalb meines Projektordners befand
– ben_g_123
22. April um 12:46 Uhr
Dmitri Pawlutin
Eine andere Lösung, die für mich funktioniert hat, ist der manuelle Anruf dotenv.config() im Inneren vite.config.js. Dadurch werden Variablen geladen .env (alle!) hinein process.env:
import { defineConfig } from 'vite'
import dotenv from 'dotenv'
dotenv.config() // load env vars from .env
export default defineConfig({
define: {
__VALUE__: `"${process.env.VALUE}"` // wrapping in "" since it's a string
},
//....
}
Ich hatte das gleiche Problem und habe es durch Ausführen gelöst
pnpm add dot-env
pnpm add -S dotenv-webpack.
Zuletzt habe ich dafür gesorgt, dass ich hinzugefügt habe VITE_ vor dem Namen, den ich für meine Umgebungsvariable hatte, also von MAP_API_KEY Zu VITE_MAP_API_KEY.
Wie angegeben in Dokumentekönnen Sie das Präfix mit mdoify ändern envPrefix.
Env-Variablen beginnend mit envPrefix wird Ihrem Client-Quellcode über import.meta.env zugänglich gemacht.
Sie können diese Option beliebig ändern außer für leere Zeichenfolge('').
envPrefix sollte nicht als festgelegt werden '', wodurch alle Ihre Umgebungsvariablen offengelegt werden und ein unerwarteter Verlust vertraulicher Informationen verursacht wird. Vite gibt bei der Erkennung einen Fehler aus ''.
Daher könnte es eine unangemessene Aktion sein, die dotenv-Konfiguration direkt zu überschreiben, um das Präfix vollständig zu entfernen, da alle in env geschriebenen Felder direkt an den Client gesendet würden.
Francisco
Ich hatte das gleiche Problem und das Problem bestand darin, dass ich meine .env.local-Datei im src-Ordner statt im Stammverzeichnis erstellt hatte. Wenn Sie das ändern, funktioniert es problemlos, indem Sie die Variable während des Vorgangs „import.meta“ aufrufen .env”
14540000cookie-checkSo laden Sie Umgebungsvariablen aus einer .env-Datei mit Viteyes
Nur diejenigen mit dem Präfix VITE_ werden in Ihrem JS-/Vue-Code sichtbar sein. Überprüfen Sie deren Dokumentation vitejs.dev/guide/env-and-mode.html
– Joel Chu
28. April um 1:03