Nicht erfasster Referenzfehler: Prozess ist nicht definiert

Lesezeit: 7 Minuten

Benutzer-Avatar
Kantharis

Ich verwende node.js, um eine Webanwendung zu erstellen. Wenn ich die Anwendung ausführe (entweder durch Öffnen von index.html im Browser oder durch Verwenden des Befehls „npm start“ auf dem Terminal), erhalte ich zwei Fehler:

Nicht erfasster Referenzfehler: Prozess ist nicht definiert

Nicht erfasster ReferenceError: require ist nicht definiert

Ich habe den Fehler „erforderlich ist nicht definiert“ gelöst, indem ich speziell den Link zu in mein Head-Tag index.html aufgenommen habe Dies -Skript, in dem die erforderliche Funktion definiert ist. Allerdings kann ich nichts Ähnliches für die Prozessfunktion finden.

Meine Frage ist zweigeteilt:

  1. Warum müssen integrierte node.js-Module neu definiert werden? Warum werden sie nicht so erkannt, wie sie sind, also “eingebaute Module”? Bedeutet der Begriff “eingebautes Modul” nicht, dass ein Modul nicht extern/aus zweiter Hand neu definiert werden muss?

  2. Gibt es eine Möglichkeit, dieses Problem zu lösen? Mein Skript ist sehr einfach, ich versuche nur, eine grundlegende Funktion von node.js zu verwenden, daher kann ich nicht herausfinden, welche Fehler ich möglicherweise gemacht habe.

Wenn jemand auf dieses Problem gestoßen ist und einen Weg gefunden hat, es zu umgehen, oder einen Grund dafür gefunden hat, wären Sie eine große Hilfe.

  • Hallo allerseits! Vielen Dank, dass Sie immer noch versuchen, diese Frage zu beantworten! Diese Frage stellt sich derzeit höchstwahrscheinlich nicht (und gilt möglicherweise nicht für aktuelle Tools), da 6 Jahre vergangen sind, und in der Zwischenzeit Web-App-Technologien große Fortschritte gemacht haben und auch der Entwicklungsprozess stark vereinfacht wurde. Es ist jedoch interessant zu sehen, dass es manchmal immer noch gültig ist.

    – Kantharis

    25. Februar 2021 um 12:45 Uhr

Node.js-Code muss vom Knotenprozess ausgeführt werden, nicht vom Browser (der Code muss auf dem Server ausgeführt werden).

Um den Code auszuführen, müssen Sie den Befehl ausführen:

node server.js

Und dann können Sie von einem Browser aus auf Ihren Server zugreifen, indem Sie “http://localhost:8080” zum Beispiel. Sie müssen eine Datei server.js (oder was auch immer) mit dem gewünschten Servercode haben (in diesem Fall erstellen Sie einen Webserver in Port 8080).

Sie können diesem einfachen Beispiel folgen, indem Sie Express als HTTP-Servermodul verwenden: http://expressjs.com/starter/hello-world.html

  • Ich verwende den Befehl „npm start“, der sich auf das „start“-Skript in package.json bezieht, das auf „start“ gesetzt ist: „http-server -a localhost -p 8000 -c-1“, also tut es im Grunde dies , es läuft auf einem lokalen Server, den ich erstelle. Trotzdem bekomme ich “Prozess ist nicht definiert”. Es muss also ein anderes Problem sein. Trotzdem danke.

    – Kantharis

    14. Mai 2015 um 17:02 Uhr


  • In scripts/start property habe ich normalerweise so etwas wie: “start”: “node server.js”, wenn Sie direkt ein node.js-Skript haben, muss die erste Zeile “#!/usr/bin/env node” oder ähnlich sein . Versuchen Sie jedoch, direkt mit dem Knotenbefehl auszuführen. Das Posten des Codes könnte das Problem klären.

    – gruselig

    15. Mai 2015 um 11:59 Uhr

Webpack kann Umgebungsvariablen in den „clientseitigen“ .js-Code einfügen (sehr nützlich im Fall von SPA/PWA). Sie sollten sie als Plugins in webpack.config.js definieren

webpack.config.js

module.exports = {
plugins: [
    new webpack.DefinePlugin({
      'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
      'process.env.MY_ENV': JSON.stringify(process.env.MY_ENV),
      ... and so on ...
    })
],
}

Jetzt können Sie auf der Clientseite darauf zugreifen:

app.js

// Something like that
if(process.env.NODE_ENV === 'debug'){
    setDebugLevel(1)
}

  • Ich weiß nicht warum, aber ich brauchte das plötzlich, als ich das Webpack eines Projekts von 3 auf 5 (und CLI von 3 auf 4) migrierte. Vielen Dank!

    – n8jadams

    14. Juni 2021 um 13:06 Uhr

  • Toller Tipp, er hat mir geholfen, dass die clientseitigen Firebase-Anmeldeinformationen von der von uns ausgeführten APP-Umgebung bestimmt werden.

    – JeanCosta

    7. September 2021 um 17:14 Uhr

  • Ich weiß nicht wie, aber ich muss diese Antwort mit einem Lesezeichen versehen

    – ndotie

    13. Februar um 10:15 Uhr

Benutzer-Avatar
taco_freitag

Wenn Sie mit diesem Problem konfrontiert sind und Webpack verwenden, können Sie das gewünschte erhalten process Daten, die mithilfe von in das Client-Bundle eingefügt werden DefinePlugin in deinem webpack.config.js.

Im folgenden Beispiel zeige ich, wie Sie mehrere Dinge hinzufügen können process.env Objekt im Browser verfügbar zu machen:

  1. alle Umgebungsvariablen darin .env Nutzung der Bibliothek
    dotenv
  2. der Wert von NODE_ENVdas ist entweder 'development' oder 'production'

Arbeitsbeispiel

# .env

API_KEY=taco-tues-123
API_SECRET=secret_tacos
// webpack.config.js

const dotenv = require('dotenv').config({ path: __dirname + '/.env' })
const isDevelopment = process.env.NODE_ENV !== 'production'

module.exports = {
  plugins: [
    new webpack.DefinePlugin({
      'process.env': JSON.stringify(dotenv.parsed),
      'process.env.NODE_ENV': JSON.stringify(isDevelopment ? 'development' : 'production'),
    }),
  ].filter(Boolean),
}
// Within client side bundle (React)
// src/App.jsx

console.log(process.env)          // {API_KEY: "taco-tues-123", API_SECRET: "secret_tacos"}
console.log(process.env.NODE_ENV) // development

Beachte das console.log(process.env) hat nur die Werte aus der .env Datei, und das NODE_ENV ist kein Teil der process.env Objekt.

Im Beispiel unten zeige ich, wie ich versucht habe, das zu spritzen process.env Objekt, das mich zu diesem Stapelüberlauf geführt hat. Ich füge auch ein Highlight aus der Webpack-Dokumentation hinzu, warum der folgende Code nicht funktioniert hat.

Gebrochenes Beispiel

module.exports = {
  plugins: [
    new webpack.DefinePlugin({
      'process.env': {
        ...dotenv.parsed,
        'NODE_ENV': JSON.stringify(isDevelopment ? 'development' : 'production')
      }
    }),
  ].filter(Boolean),
}
// Within client side bundle (React)
// src/App.jsx

console.log(process.env)          // Uncaught ReferenceError: taco is not defined
console.log(process.env.NODE_ENV) // development

Aus dem Webpaket DefinePlugin-Dokumente:

Warnung Beim Definieren von Werten für Prozess bevorzugen

'process.env.NODE_ENV': JSON.stringify('production')

Über

process: { env: { NODE_ENV: JSON.stringify('production') } }

Die Verwendung des letzteren überschreibt das Prozessobjekt, was die Kompatibilität mit einigen Modulen beeinträchtigen kann, die erwarten, dass andere Werte für das Prozessobjekt definiert werden.

!Warnung!

Injektion dotenv.parsed wie beschrieben in das Client-Bundle einfügen, werden diese Geheimnisse dem Client offengelegt. Für Entwicklungszwecke keine große Sache, aber in einer bereitgestellten Produktionsumgebung sind alle Passwörter oder privaten API-Schlüssel für jeden sichtbar, der danach sucht.

Ich hatte das gleiche Problem gelöst, indem ich in meine .eslintrc.js-Datei gegangen bin, um meine Globals-Variablen zu konfigurieren, der Globals-Variablen require und process hinzugefügt und den entsprechenden Wert auf “beschreibbar” gesetzt habe. Hoffe, es funktioniert für Sie.

dieser Link hat wirklich geholfen
https://eslint.org/docs/user-guide/configuring#specifying-globals

Ich habe gerade diesen Fehler erhalten (Uncaught ReferenceError: process is not defined) in einer lokalen Hot-Reloading Quasar (Vue)-App, wenn ein bestimmter Endpunkt aufgerufen wird. Die Lösung für mich bestand schließlich darin, den Hot-Reloading-Server einfach neu zu starten (ich hatte ihn nicht neu geladen, seit ich die process.env.MY_VARIABLE Code).

Benutzer-Avatar
Zeghra

Ich hatte das gleiche Problem, als ich versuchte, diese Node-JS-App zu erstellen: https://www.youtube.com/watch?v=mr9Mtm_TRpw

Die Anforderung in HTML wurde von einem

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

Privacy policy