Umgebungsvariablen verwenden
Astro bietet dir Zugang zu Vites eingebauter Unterstützung für Umgebungsvariablen und enthält einige Standard-Umgebungsvariablen für dein Projekt, mit denen du auf Konfigurationswerte für dein aktuelles Projekt zugreifen kannst (z.B. site
, base
), ob dein Projekt in Entwicklung oder Produktion läuft und mehr.
Astro bietet auch eine Möglichkeit, Ihre Umgebungsvariablen mit Typsicherheit zu verwenden und zu organisieren. Sie ist für die Verwendung innerhalb des Astro-Kontexts verfügbar (z. B. Astro-Komponenten, Routen und Endpunkte, UI-Framework-Komponenten, Middleware) und wird mit einem Schema in deiner Astro-Konfiguration (EN) verwaltet.
Vite’s integrierte Unterstützung
Abschnitt betitelt Vite’s integrierte UnterstützungAstro nutzt die in Vite eingebaute Unterstützung für Umgebungsvariablen, die zum Zeitpunkt des Builds statisch ersetzt werden, und lässt dich mit einer seiner Methoden mit ihnen arbeiten.
Beachte, dass zwar alle Umgebungsvariablen im serverseitigen Code verfügbar sind, aber aus Sicherheitsgründen nur Umgebungsvariablen mit dem Präfix PUBLIC_
im clientseitigen Code verfügbar sind.
In diesem Beispiel ist PUBLIC_ANYBODY
(zugänglich über import.meta.env.PUBLIC_ANYBODY
) sowohl im Server- als auch im Client-Code verfügbar, während SECRET_PASSWORD
(zugänglich über import.meta.env.SECRET_PASSWORD
) nur serverseitig verfügbar ist.
.env
-Dateien werden nicht innerhalb von Konfigurationsdateien geladen.
IntelliSense für TypeScript
Abschnitt betitelt IntelliSense für TypeScriptStandardmäßig bietet Astro eine Typdefinition für import.meta.env
in astro/client.d.ts
.
Du kannst zwar weitere benutzerdefinierte Umgebungsvariablen in .env.[mode]
-Dateien definieren, aber du möchtest vielleicht TypeScript IntelliSense für benutzerdefinierte Umgebungsvariablen nutzen, denen das Präfix PUBLIC_
vorangestellt ist.
Um das zu erreichen, kannst du eine env.d.ts
in src/
erstellen und ImportMetaEnv
wie folgt konfigurieren:
Standard-Umgebungsvariablen
Abschnitt betitelt Standard-UmgebungsvariablenAstro enthält ein paar Umgebungsvariablen, die sofort einsatzbereit sind:
import.meta.env.MODE
: Der Modus, in dem deine Website läuft. Das istdevelopment
, wenn duastro dev
benutzt undproduction
, wenn duastro build
benutzt.import.meta.env.PROD
:true
, wenn deine Website im Produktionsmodus läuft; andernfallsfalse
.import.meta.env.DEV
:true
, wenn deine Website im Entwicklungsmodus läuft; sonstfalse
. Immer das Gegenteil vonimport.meta.env.PROD
.import.meta.env.BASE_URL
: Die Basis-URL, von der aus deine Seite geladen wird. Sie wird durch die Konfigurationsoptionbase
(EN) bestimmt.import.meta.env.SITE
: Diese wird auf die Optionsite
(EN) gesetzt, die in derastro.config
deines Projekts angegeben ist.
import.meta.env.ASSETS_PREFIX
: Das Präfix für die von Astro erzeugten Asset-Links, wenn die Konfigurationsoptionbuild.assetsPrefix
(EN) gesetzt ist. Damit können Asset-Links erstellt werden, die nicht von Astro verarbeitet werden.
Verwende sie wie jede andere Umgebungsvariable.
Umgebungsvariablen definieren
Abschnitt betitelt Umgebungsvariablen definieren.env
-Dateien
Abschnitt betitelt .env-DateienUmgebungsvariablen können aus .env
-Dateien in deinem Projektverzeichnis geladen werden.
Erstelle einfach eine .env
Datei im Projektverzeichnis und füge ihr einige Variablen hinzu.
Du kannst auch .production
, .development
oder einen benutzerdefinierten Modusnamen an den Dateinamen selbst anhängen (z.B. env.testing
, .env.staging
). So kannst du verschiedene Umgebungsvariablen zu verschiedenen Zeiten verwenden.
Die Befehle astro dev
und astro build
sind standardmäßig auf die Modi "development"
bzw. "production"
eingestellt. Du kannst diese Befehle mit dem --mode
flag (EN) ausführen, um einen anderen Wert für mode
zu übergeben und die passende .env
Datei zu laden.
So kannst du den Entwicklungsserver betreiben oder deine Website mit verschiedenen APIs verbinden:
Mehr über .env
-Dateien findest du in der Vite-Dokumentation.
In der Astro-Konfigurationsdatei
Abschnitt betitelt In der Astro-KonfigurationsdateiAstro wertet die Konfigurationsdateien aus, bevor es deine anderen Dateien lädt. Das bedeutet, dass du mit import.meta.env
in astro.config.mjs
nicht auf Umgebungsvariablen zugreifen kannst, die in .env
-Dateien gesetzt wurden.
Du kannst process.env
in einer Konfigurationsdatei verwenden, um auf andere Umgebungsvariablen zuzugreifen, wie z.B. die von der CLI gesetzten.
Du kannst auch Vite’s loadEnv
helper verwenden, um .env
Dateien manuell zu laden.
Mit pnpm
kannst du keine Module importieren, die nicht direkt in deinem Projekt installiert sind. Wenn du pnpm
verwendest, musst du vite
installieren, um den loadEnv
-Helper zu benutzen.
Verwendung der Kommandozeilenschnittstelle (CLI)
Abschnitt betitelt Verwendung der Kommandozeilenschnittstelle (CLI)Du kannst auch Umgebungsvariablen hinzufügen, während du dein Projekt ausführst:
Abrufen von Umgebungsvariablen
Abschnitt betitelt Abrufen von UmgebungsvariablenAuf Umgebungsvariablen in Astro wird mit import.meta.env zugegriffen, wobei die in ES2020 hinzugefügte Funktion import.meta anstelle von process.env verwendet wird.
Verwende zum Beispiel import.meta.env.PUBLIC_POKEAPI
, um die Umgebungsvariable PUBLIC_POKEAPI
zu erhalten.
Bei der Verwendung von SSR kann zur Laufzeit auf Umgebungsvariablen zugegriffen werden, je nachdem, welcher SSR-Adapter verwendet wird. Bei den meisten Adaptern kannst du mit process.env
auf Umgebungsvariablen zugreifen, aber einige Adapter funktionieren anders. Für den Deno-Adapter verwendest du Deno.env.get()
. Siehe Zugriff auf die Cloudflare-Laufzeit (EN) zur Handhabung von Umgebungsvariablen bei der Verwendung des Cloudflare-Adapters. Astro prüft zunächst die Serverumgebung auf Variablen, und wenn sie nicht vorhanden sind, sucht Astro in den .env-Dateien nach ihnen.
Typsichere Umgebungsvariablen
Abschnitt betitelt Typsichere UmgebungsvariablenMit der API astro:env
kannst du ein typsicheres Schema für von dir gesetzte Umgebungsvariablen konfigurieren. So kannst du angeben, ob sie auf dem Server oder dem Client verfügbar sein sollen, und ihren Datentyp und zusätzliche Eigenschaften definieren.
astro:env
kompatibel macht (EN).
Grundlegende Verwendung
Abschnitt betitelt Grundlegende VerwendungDefiniere dein Schema
Abschnitt betitelt Definiere dein SchemaUm ein Schema zu konfigurieren, füge die Option env.schema
zu deiner Astro-Konfiguration hinzu:
Du kannst dann Variablen als String, Zahl, Enum oder Boolean mit dem envField
-Helper registrieren. Definiere die Art der Umgebungsvariable, indem du einen context
(Client oder Server) und einen access
(geheim oder öffentlich) für jede Variable angibst, und übergebe alle zusätzlichen Eigenschaften wie optional
oder default
in einem Objekt:
Die Typen werden für dich generiert, wenn du astro dev
oder astro build
ausführst. Du kannst aber auch astro sync
ausführen, um nur Typen zu generieren.
Verwende Variablen aus deinem Schema
Abschnitt betitelt Verwende Variablen aus deinem SchemaImportiere und verwende deine definierten Variablen aus dem entsprechenden /client
oder /server
Modul:
Variablentypen
Abschnitt betitelt VariablentypenEs gibt drei Arten von Umgebungsvariablen, die durch die Kombination von context
(Client oder Server) und access
(geheim oder öffentlich) in deinem Schema bestimmt werden:
-
Öffentliche Client-Variablen: Diese Variablen landen sowohl in deinem endgültigen Client- als auch in deinem Server-Bundle und können sowohl vom Client als auch vom Server über das Modul
astro:env/client
aufgerufen werden: -
Öffentliche Servervariablen: Diese Variablen landen in deinem endgültigen Server-Bundle und können auf dem Server über das Modul
astro:env/server
aufgerufen werden: -
Geheime Servervariablen: Diese Variablen sind nicht Teil deines endgültigen Pakets und können auf dem Server über das Modul
astro:env/server
abgerufen werden:Standardmäßig werden Secrets nur zur Laufzeit überprüft. Du kannst die Validierung privater Variablen beim Start aktivieren, indem du
validateSecrets: true
(EN) konfigurierst.
Geheime Client-Variablen werden nicht unterstützt, da es keine sichere Möglichkeit gibt, diese Daten an den Client zu senden. Daher ist es nicht möglich, sowohl context: "client"
und access: "secret"
in deinem Schema zu konfigurieren.
Datentypen
Abschnitt betitelt DatentypenDerzeit werden vier Datentypen unterstützt: Strings, Zahlen, Enums und Booleans:
envField
API-Referenz (EN).
Dynamisches Abrufen von Secrets
Abschnitt betitelt Dynamisches Abrufen von SecretsObwohl du dein Schema definiert hast, möchtest du vielleicht den Rohwert eines bestimmten Secrets abrufen oder Secrets abrufen, die nicht in deinem Schema definiert sind. In diesem Fall kannst du getSecret()
verwenden, das von astro:env/server
exportiert wird.
Einschränkungen
Abschnitt betitelt Einschränkungen-
astro:env
ist ein virtuelles Modul, das heißt, es kann nur innerhalb des Astro-Kontexts verwendet werden. Zum Beispiel kannst du es in- Middlewares
- Astro-Routen und Endpunkte
- Astro-Komponenten
- Framework-Komponenten
- Modules
verwenden.
Du kannst sie im Folgenden nicht verwenden und musst auf
process.env
zurückgreifen:astro.config.mjs
- Skripte
-
@astrojs/cloudflare
(EN) unterscheidet sich ein wenig von anderen Adaptern. Die Umgebungsvariablen sind auf die Anfrage beschränkt, im Gegensatz zu Node.js, wo sie global sind.Das bedeutet, dass du Geheimnisse immer innerhalb des Anfragebereichs verwenden musst: