next.js-Umgebungsvariablen sind undefiniert (Next.js 10.0.5)
Lesezeit: 4 Minuten
Ich programmiere eine Website mit Next.js und habe versucht, Google Tag Manager hinzuzufügen.
Ich habe das Tutorial zum Next.js-Github-Beispiel befolgt, kann aber aus bestimmten Gründen nicht auf meine Umgebungsvariablen zugreifen.
Es heißt, meine Variable sei undefiniert.
Ich habe in meinem Projektordner eine Datei .env.local erstellt (auf derselben Ebene wie Komponenten, Knotenmodule, Seiten usw.).
In dieser Datei habe ich eine Variable wie diese erstellt (Testzweck):
NEXT_PUBLIC_DB_HOST=localhost
Und auf meiner Indexseite habe ich diesen Code ausprobiert:
Aber in meiner Konsole erhalte ich eine „Test undefiniert“.
Ich habe stattdessen erfolglos versucht, meine Variable in eine .env-Datei einzufügen.
Was mache ich falsch?
Haben Sie versucht, den nächsten Server neu zu laden?
– Danila
10. Februar 2021 um 12:59 Uhr
Ich bin mir nicht sicher, was du meinst. Ich habe angehalten, was sich in meinem vscode-Terminal befand, und erneut eine Garnentwicklung durchgeführt. Gibt es noch etwas zu tun, um den nächsten Server neu zu laden?
– Florie Anstett
10. Februar 2021 um 14:36 Uhr
Ja, genau das. Es hat nicht geholfen? Sind Sie sicher, dass .env Datei auf der gleichen Ebene wie package.json? Ich bin mir nicht ganz sicher, was sonst noch helfen kann.
– Danila
10. Februar 2021 um 15:29
Ok, ich bin dumm! Ich habe meinen Fehler gefunden… Ich habe ein „:“ anstelle eines „=“ eingegeben. Ich schäme mich…
– Florie Anstett
11. Februar 2021 um 7:18 Uhr
Vielen Dank @FlorieAnstett. Ich habe den gleichen Fehler gemacht und mehr als 2 Stunden verschwendet
– Schadab
29. September 2021 um 15:05 Uhr
Dijalma Silva
Diese Umgebung funktioniert nur auf der Serverseite. Um clientseitig auf diese Umgebung zuzugreifen, müssen Sie sie in next.config.js deklarieren
Ab Nextjs-Version 9.4 wird next.config.js nicht mehr als Umgebungsstrategie empfohlen. Benutzen Sie eine ältere Version von NextJS oder ist dies Ihrer Meinung nach der einzige Weg zum Erfolg?
– cpres
10. August 2021 um 17:49 Uhr
Ich hatte gerade dieses Problem und es hat meinen Fehler bei Next 10.0.3 behoben
– Ein Webb
10. August 2021 um 21:29 Uhr
Stellen Sie den Variablen bei Next +9 das Präfix voran NEXT_PUBLIC_. Dadurch werden sie im Browser angezeigt.
– Miquel-Kanal
11. Februar 2022 um 19:41 Uhr
Ich verwende Next 12.1 und „NEXT_PUBLIC_“ hat bei mir auch nach dem Neustart des Servers nicht funktioniert. Dies geschah
– Matt Wright
24. Februar 2022 um 2:49
Safaetul Ahasan Piyas
Erstellen .env (alle Umgebungen), .env.development (Entwicklungsumgebung) und .env.produktion (Produktionsumfeld).
Fügen Sie allen Ihren Umgebungsvariablen das Präfix NEXT_PUBLIC hinzu.
NEXT_PUBLIC_API_URL=http://localhost:3000/
Mit dem Präfix „process.env“ verwenden
process.env.NEXT_PUBLIC_API_URL
Stoppen Sie den Server und starten Sie ihn neu:
npm run dev
Ich hoffe es klappt. Diese Lösung für die neueste Version von nextJs (über 9)
Für diejenigen, die NextJS +9 verwenden und im Browser nach Umgebungsvariablen suchen, sollten Sie die verwenden NEXT_PUBLIC_ Präfix. Beispiel:
Der Neustart des Servers hat bei mir funktioniert.
Bearbeiten und speichern Sie .env.local
Stoppen Sie den Server und starten Sie ihn neu. npm run dev
In der nächsten Zeile sollten Sie eine Ausgabe wie diese erhalten:
> k[email protected] dev
> next dev
Loaded env from [path]/.env.local
Nachdem ich unzählige Stunden damit verbracht hatte, stellte ich fest, dass es sowohl in der Pre- als auch in der Post-Nextjs-9.4-Dokumentation einen winzigen kleinen Absatz gibt:
Um nur serverbezogene Geheimnisse zu schützen, ersetzt Next.js „process.env.*“ durch die korrekten Werte unter Bauzeit.
Schlüsselwörter sind BAUZEIT. Dies bedeutet, dass Sie diese Variablen beim Ausführen festgelegt haben müssen next build und nicht (nur) bei next start damit die Clientseite auf diese Variablen zugreifen kann.
Uff, das war der Schlüssel für mich. Ich hatte diese Variablen mithilfe eines NPM-Skripts festgelegt, allerdings nach der Erstellungszeit, aber vor dem Starten meines Servers.
Starten Sie den Server neu und es hat gut funktioniert. Verwendung von Nextjs 12.1.0 mit Typoskript
Uff, das war der Schlüssel für mich. Ich hatte diese Variablen mithilfe eines NPM-Skripts festgelegt, allerdings nach der Erstellungszeit, aber vor dem Starten meines Servers.
– ThePuzzleMaster
24. Januar 2022 um 10:26
Chris
Hinzufügen mit der neuesten Version von Dokumentation dazu v12+.
Mithilfe der Datei next.config.js können Sie Server- und Clientvariablen angeben:
module.exports = {
serverRuntimeConfig: {
// Will only be available on the server side
mySecret: 'secret',
secondSecret: process.env.SECOND_SECRET, // Pass through env variables
},
publicRuntimeConfig: {
// Will be available on both server and client
staticFolder: '/static',
},
}
Sie können weiterhin eine env.local-Datei verwenden und die Variable an die Datei next.config.js übergeben. Zum Beispiel:
Haben Sie versucht, den nächsten Server neu zu laden?
– Danila
10. Februar 2021 um 12:59 Uhr
Ich bin mir nicht sicher, was du meinst. Ich habe angehalten, was sich in meinem vscode-Terminal befand, und erneut eine Garnentwicklung durchgeführt. Gibt es noch etwas zu tun, um den nächsten Server neu zu laden?
– Florie Anstett
10. Februar 2021 um 14:36 Uhr
Ja, genau das. Es hat nicht geholfen? Sind Sie sicher, dass
.env
Datei auf der gleichen Ebene wiepackage.json
? Ich bin mir nicht ganz sicher, was sonst noch helfen kann.– Danila
10. Februar 2021 um 15:29
Ok, ich bin dumm! Ich habe meinen Fehler gefunden… Ich habe ein „:“ anstelle eines „=“ eingegeben. Ich schäme mich…
– Florie Anstett
11. Februar 2021 um 7:18 Uhr
Vielen Dank @FlorieAnstett. Ich habe den gleichen Fehler gemacht und mehr als 2 Stunden verschwendet
– Schadab
29. September 2021 um 15:05 Uhr