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

Mahmouds Benutzeravatar
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
    });
}

Für svelteKit

// vite.config.js

import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig, loadEnv } from 'vite';

/** @type {import('vite').UserConfig} */
export default ({ mode }) => {
    // Extends 'process.env.*' with VITE_*-variables from '.env.(mode=production|development)'
    process.env = {...process.env, ...loadEnv(mode, process.cwd())};
    return defineConfig({
        plugins: [sveltekit()]
    }); 
};

  • 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 🤫

    – Eugene P.

    17. Mai 2022 um 18:39 Uhr

  • vitejs.dev/guide/env-and-mode.html#intellisense-for-typescript

    – Robertovg

    23. Juni 2022 um 10:35 Uhr

  • 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

Benutzeravatar von Dmitri Pavlutin
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
  },
  //....
}

Wo .env Datei könnte sein:

VALUE='My env var value'

Sehen die Demo.

Benutzeravatar von Tabot Charles Bessong
Tabot Charles Bessong

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.

Also ändere es in TEST_ wird auch funktionieren.

export default defineConfig({
...
  envPrefix: 'TEST_',
...
})

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.

Franciscos Benutzeravatar
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”

1454000cookie-checkSo laden Sie Umgebungsvariablen aus einer .env-Datei mit Vite

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy