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:

console.log("test ", process.env.NEXT_PUBLIC_DB_HOST);

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

Benutzeravatar von Dijalma Silva
Dijalma Silva

Diese Umgebung funktioniert nur auf der Serverseite. Um clientseitig auf diese Umgebung zuzugreifen, müssen Sie sie in next.config.js deklarieren

Hier entlang:

module.exports = {
  reactStrictMode: true,
  env: {
    BASE_URL: process.env.BASE_URL,
  }
}

  • 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


Benutzeravatar von Safaetul Ahasan Piyas
Safaetul Ahasan Piyas

  1. Erstellen .env (alle Umgebungen), .env.development (Entwicklungsumgebung) und .env.produktion (Produktionsumfeld).

  2. Fügen Sie allen Ihren Umgebungsvariablen das Präfix NEXT_PUBLIC hinzu.

NEXT_PUBLIC_API_URL=http://localhost:3000/

  1. Mit dem Präfix „process.env“ verwenden

process.env.NEXT_PUBLIC_API_URL

  1. Stoppen Sie den Server und starten Sie ihn neu:

npm run dev

  1. 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:

NEXT_PUBLIC_ANALYTICS_ID=123456789

Sehen Dokumentation als Referenz.

Der Neustart des Servers hat bei mir funktioniert.

  1. Bearbeiten und speichern Sie .env.local
  2. Stoppen Sie den Server und starten Sie ihn neu. npm run dev
  3. 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:

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.

    – ThePuzzleMaster

    24. Januar 2022 um 10:26

Benutzer-Avatar von Eric Mabo
Eric Mabo

Dies ist meine next.config.js-Datei.

/** @type {import('next').NextConfig} */
const nextConfig = {
  reactStrictMode: true,
  env: {
    BASE_URL: process.env.NEXT_PUBLIC_SITE_URL,
  },
};

module.exports = nextConfig;

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' Benutzer-Avatar
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:

 publicRuntimeConfig: {
   DB_URL: process.env.DB_URL
 }

Und dann können Sie wie folgt auf die Variable zugreifen:

import getConfig from 'next/config';
const { publicRuntimeConfig } = getConfig();
publicRuntimeConfig.DB_URL;

1451700cookie-checknext.js-Umgebungsvariablen sind undefiniert (Next.js 10.0.5)

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

Privacy policy