node · JavaScript
Die Meldung
ReferenceError: require is not defined in ES module scope, you can use import instead
Was es bedeutet
Das ist das genaue Gegenstück zum vorigen Fehler — die Datei wird als ESM gelesen und enthält CommonJS' require. Es passiert fast immer direkt nach dem Hinzufügen von "type": "module" in package.json, während alte Skripte noch im Baum liegen. Soll diese eine Datei in der alten Welt bleiben, ist mv script.js script.cjs die engste Änderung; für den Umzug bedeutet require durch import zu ersetzen auch, __dirname und require.main === module zu ersetzen, die es in ESM nicht gibt.
Die Lösung
mv script.js script.cjs- Ausgegeben von
- node
- JavaScript
- 15
Browser- und Node-Fehler nennen meist, was kaputtging, aber nicht, warum der Wert so wurde — Sie haben undefined gelesen, es war keine Funktion, es war kein JSON — die Stelle zum Reparieren liegt also stromaufwärts der werfenden Zeile, und nur diese Zeile mit ?. und Standardwerten stillzulegen lässt dasselbe Problem weiter entfernt und in schwerer erkennbarer Gestalt wiederkehren.
Eine Fehlermeldung lesen
- Von der ersten Zeile abwärts lesen. Weiter unten geht es um das Innere des Werkzeugs; die Ursache steht meist oben.
- Gibt es Datei und Zeilennummer, dort anfangen — nicht der oberste Stack-Frame, sondern die oberste Zeile, die eine eigene Datei nennt.
- Die Meldung wörtlich suchen, vorher aber eigene Pfade und Variablennamen entfernen; genau die verhindern den Treffer.
- Dieselbe Lage wird je Werkzeugversion anders formuliert. Passen die Treffer nicht, die Versionsnummer mit in die Suche.
- Vor dem Einfügen einer Lösung prüfen, was sie verwirft. Manches davon lässt sich nicht zurückholen.
Häufige Fragen
Q. Was bedeutet „ReferenceError: require is not defined in ES module scope, you can use import instead“?
Das ist das genaue Gegenstück zum vorigen Fehler — die Datei wird als ESM gelesen und enthält CommonJS' require. Es passiert fast immer direkt nach dem Hinzufügen von "type": "module" in package.json, während alte Skripte noch im Baum liegen. Soll diese eine Datei in der alten Welt bleiben, ist mv script.js script.cjs die engste Änderung; für den Umzug bedeutet require durch import zu ersetzen auch, __dirname und require.main === module zu ersetzen, die es in ESM nicht gibt.
Q. Wie behebe ich das?
mv script.js script.cjs — vor dem Ausführen oben prüfen, was dieser Befehl verwirft.
Q. Welches Werkzeug gibt das aus?
node. Es gehört zu JavaScript, und die Meldung hat 14 Wörter.