Umgebungsvariablen
Beispiele
Next.js verfügt über integrierte Unterstützung für Umgebungsvariablen, die Ihnen Folgendes ermöglichen:
- Laden von Umgebungsvariablen mit
.env
- Bündeln von Umgebungsvariablen für den Browser durch Voranstellen von
NEXT_PUBLIC_
Laden von Umgebungsvariablen
Next.js unterstützt standardmäßig das Laden von Umgebungsvariablen aus .env*
-Dateien in process.env
.
Dies lädt process.env.DB_HOST
, process.env.DB_USER
und process.env.DB_PASS
automatisch in die Node.js-Umgebung und ermöglicht deren Verwendung in Next.js-Datenabfragemethoden und API-Routen.
Zum Beispiel bei Verwendung von getStaticProps
:
Laden von Umgebungsvariablen mit @next/env
Wenn Sie Umgebungsvariablen außerhalb der Next.js-Laufzeit laden müssen, z. B. in einer Root-Konfigurationsdatei für ein ORM oder einen Testrunner, können Sie das Paket @next/env
verwenden.
Dieses Paket wird intern von Next.js verwendet, um Umgebungsvariablen aus .env*
-Dateien zu laden.
Um es zu verwenden, installieren Sie das Paket und verwenden Sie die Funktion loadEnvConfig
, um die Umgebungsvariablen zu laden:
Dann können Sie die Konfiguration bei Bedarf importieren. Zum Beispiel:
Referenzieren anderer Variablen
Next.js erweitert automatisch Variablen, die $
verwenden, um auf andere Variablen zu verweisen, z. B. $VARIABLE
in Ihren .env*
-Dateien. Dies ermöglicht das Referenzieren anderer Geheimnisse. Zum Beispiel:
In diesem Beispiel würde process.env.TWITTER_URL
auf https://x.com/nextjs
gesetzt werden.
Hinweis: Wenn Sie eine Variable mit einem
$
im tatsächlichen Wert verwenden müssen, muss sie mit Escapezeichen versehen werden, z. B.\$
.
Bündeln von Umgebungsvariablen für den Browser
Nicht-NEXT_PUBLIC_
-Umgebungsvariablen sind nur in der Node.js-Umgebung verfügbar, d. h. sie sind nicht für den Browser zugänglich (der Client läuft in einer anderen Umgebung).
Um den Wert einer Umgebungsvariablen im Browser verfügbar zu machen, kann Next.js einen Wert zum Build-Zeitpunkt in das an den Client gesendete JS-Bundle "inline" einfügen, wobei alle Verweise auf process.env.[variable]
durch einen fest codierten Wert ersetzt werden. Um dies zu erreichen, müssen Sie die Variable einfach mit NEXT_PUBLIC_
voranstellen. Zum Beispiel:
Dies weist Next.js an, alle Verweise auf process.env.NEXT_PUBLIC_ANALYTICS_ID
in der Node.js-Umgebung durch den Wert aus der Umgebung, in der Sie next build
ausführen, zu ersetzen, sodass Sie ihn in Ihrem gesamten Code verwenden können. Er wird in das an den Browser gesendete JavaScript inline eingefügt.
Hinweis: Nach dem Build wird Ihre App nicht mehr auf Änderungen dieser Umgebungsvariablen reagieren. Wenn Sie zum Beispiel eine Heroku-Pipeline verwenden, um in einer Umgebung erstellte Slugs in eine andere Umgebung zu übertragen, oder wenn Sie ein einzelnes Docker-Image zur Bereitstellung in mehreren Umgebungen erstellen und bereitstellen, werden alle
NEXT_PUBLIC_
-Variablen mit dem beim Build ausgewerteten Wert eingefroren. Das bedeutet, diese Werte müssen beim Projektbuild entsprechend festgelegt werden. Wenn Sie Zugriff auf Laufzeit-Umgebungswerte benötigen, müssen Sie einen eigenen API-Endpunkt einrichten, um sie dem Client bereitzustellen (bei Bedarf oder während der Initialisierung).
Beachten Sie, dass dynamische Aufrufe nicht inline eingefügt werden, wie zum Beispiel:
Laufzeit-Umgebungsvariablen
Next.js kann sowohl Build-Zeit- als auch Laufzeit-Umgebungsvariablen unterstützen.
Standardmäßig sind Umgebungsvariablen nur auf dem Server verfügbar. Um eine Umgebungsvariable für den Browser verfügbar zu machen, muss sie mit NEXT_PUBLIC_
vorangestellt werden. Diese öffentlichen Umgebungsvariablen werden jedoch während next build
in das JavaScript-Bundle inline eingefügt.
Um Laufzeit-Umgebungsvariablen zu lesen, empfehlen wir die Verwendung von getServerSideProps
oder schrittweise Einführung des App Routers.
Dies ermöglicht die Verwendung eines einzelnen Docker-Images, das durch verschiedene Umgebungen mit unterschiedlichen Werten befördert werden kann.
Hinweis:
- Sie können Code beim Server-Start mit der Funktion
register
ausführen. - Wir empfehlen nicht die Verwendung der Option runtimeConfig, da diese nicht mit dem Standalone-Ausgabemodus funktioniert. Stattdessen empfehlen wir die schrittweise Einführung des App Routers.
Standard-Umgebungsvariablen
Typischerweise wird nur die .env*
-Datei benötigt. Manchmal möchten Sie jedoch Standardwerte für die development
(next dev
)- oder production
(next start
)-Umgebung hinzufügen.
Next.js ermöglicht es Ihnen, Standardwerte in .env
(alle Umgebungen), .env.development
(Entwicklungsumgebung) und .env.production
(Produktionsumgebung) festzulegen.
Hinweis:
.env
-,.env.development
- und.env.production
-Dateien sollten in Ihr Repository einbezogen werden, da sie Standardwerte definieren. Alle.env
-Dateien sind standardmäßig in.gitignore
ausgeschlossen, sodass Sie sich für die Einbindung dieser Werte in Ihr Repository entscheiden können.
Umgebungsvariablen auf Vercel
Bei der Bereitstellung Ihrer Next.js-Anwendung auf Vercel können Umgebungsvariablen in den Projekteinstellungen konfiguriert werden.
Alle Arten von Umgebungsvariablen sollten dort konfiguriert werden. Auch Umgebungsvariablen, die in der Entwicklung verwendet werden – die anschließend auf Ihr lokales Gerät heruntergeladen werden können.
Wenn Sie Entwicklungsumgebungsvariablen konfiguriert haben, können Sie diese mit folgendem Befehl in eine .env.local
für die Verwendung auf Ihrem lokalen Rechner ziehen:
Hinweis: Bei der Bereitstellung Ihrer Next.js-Anwendung auf Vercel werden Ihre Umgebungsvariablen in
.env*
-Dateien nicht für die Edge-Laufzeit verfügbar gemacht, es sei denn, ihre Namen beginnen mitNEXT_PUBLIC_
. Wir empfehlen dringend, Ihre Umgebungsvariablen in den Projekteinstellungen zu verwalten, von wo aus alle Umgebungsvariablen verfügbar sind.
Test-Umgebungsvariablen
Neben den Umgebungen development
und production
gibt es eine dritte Option: test
. Genauso wie Sie Standardwerte für Entwicklungs- oder Produktionsumgebungen festlegen können, können Sie dies auch mit einer .env.test
-Datei für die testing
-Umgebung tun (obwohl diese nicht so häufig verwendet wird wie die beiden vorherigen). Next.js wird keine Umgebungsvariablen aus .env.development
oder .env.production
in der testing
-Umgebung laden.
Dies ist nützlich bei Tests mit Tools wie jest
oder cypress
, bei denen Sie spezifische Umgebungsvariablen nur für Testzwecke setzen müssen. Standardwerte für Tests werden geladen, wenn NODE_ENV
auf test
gesetzt ist, obwohl Sie dies normalerweise nicht manuell machen müssen, da Testtools dies für Sie übernehmen.
Es gibt einen kleinen Unterschied zwischen der test
-Umgebung und den Umgebungen development
und production
, den Sie beachten müssen: .env.local
wird nicht geladen, da Sie erwarten, dass Tests für jeden die gleichen Ergebnisse liefern. Auf diese Weise verwendet jede Testausführung die gleichen Umgebungsstandardwerte über verschiedene Ausführungen hinweg, indem Ihr .env.local
ignoriert wird (das dazu gedacht ist, die Standardeinstellung zu überschreiben).
Hinweis: Ähnlich wie bei Standard-Umgebungsvariablen sollte die
.env.test
-Datei in Ihr Repository einbezogen werden, aber.env.test.local
nicht, da.env*.local
durch.gitignore
ignoriert werden sollen.
Beim Ausführen von Unit-Tests können Sie sicherstellen, dass Ihre Umgebungsvariablen genauso geladen werden wie von Next.js, indem Sie die loadEnvConfig
-Funktion aus dem @next/env
-Paket nutzen.
Ladereihenfolge von Umgebungsvariablen
Umgebungsvariablen werden in der folgenden Reihenfolge gesucht, wobei die Suche stoppt, sobald die Variable gefunden wurde:
process.env
.env.$(NODE_ENV).local
.env.local
(Wird nicht geprüft, wennNODE_ENV
test
ist.).env.$(NODE_ENV)
.env
Wenn NODE_ENV
beispielsweise development
ist und Sie eine Variable sowohl in .env.development.local
als auch in .env
definieren, wird der Wert aus .env.development.local
verwendet.
Hinweis: Die erlaubten Werte für
NODE_ENV
sindproduction
,development
undtest
.
Gut zu wissen
- Wenn Sie ein
/src
-Verzeichnis verwenden, sollten.env.*
-Dateien im Stammverzeichnis Ihres Projekts verbleiben. - Wenn die Umgebungsvariable
NODE_ENV
nicht zugewiesen ist, weist Next.js automatischdevelopment
beim Ausführen desnext dev
-Befehls oderproduction
für alle anderen Befehle zu.
Versionshistorie
Version | Änderungen |
---|---|
v9.4.0 | Unterstützung von .env und NEXT_PUBLIC_ eingeführt. |