Error [ERR_REQUIRE_ESM]: require() of ES Module C:\Users\Alex\Desktop\rollbot\node_modules\node-fetch\src\index.js from C:\Users\Alex\Desktop\rollbot\index.js not supported.
Instead change the require of C:\Users\Alex\Desktop\rollbot\node_modules\node-fetch\src\index.js in C:\Users\Alex\Desktop\rollbot\index.js to a
dynamic import() which is available in all CommonJS modules.
{
code: 'ERR_REQUIRE_ESM'
}
Alle meine anderen Pakete funktionieren, nur Node-Fetch erledigt dies. Was muss ich tun, um Node-Fetch zu verwenden?
MarkeConstantin
Was ich herausgefunden habe ist, dass die neueste Version von node-fetch standardmäßig auf ES-Module umgestellt. Du kannst:
Deinstallieren Sie die aktuelle Version von Node-Fetch mit npm uninstall node-fetch
Installieren Sie die zweite Version: npm install node-fetch@2
node-fetch ist ein reines ESM-Modul – Sie können es nicht mit require importieren. Wir empfehlen Ihnen, bei Version 2 zu bleiben, die mit CommonJS erstellt wurde, es sei denn, Sie verwenden ESM selbst. Wir werden weiterhin kritische Fehlerbehebungen dafür veröffentlichen.
Wenn Sie wollen require es, dann downgraden Sie auf v2.
Die andere Möglichkeit, die Sie haben, ist die Verwendung von Async import('node-fetch').then(...)
Oder besser Axios verwenden, wirklich viel Verwirrung wegen ES, CommonJs und auch Typoskript-Konfigurationen.
– Ankit Kumar
24. Dezember 2021 um 20:40 Uhr
Installieren Sie die zweite Version: npm install node-fetch@2
– Snack-Überlauf
23. Februar 2022 um 1:02
Mit Garn sollte es sein yarn add node-fetch@2.
– Darth-Coder
9. März um 20:29
Ed L.
In meinem Fall fand ich es persönlich einfacher, stattdessen eine Anforderung („Cross-Fetch“) zu verwenden. Die Dokumentation ist hier: Crossfetch
Es kann sowohl in CommonJS- als auch in ES6-Modulen verwendet werden.
Ihre Antwort könnte durch zusätzliche unterstützende Informationen verbessert werden. Bitte bearbeiten Sie sie, um weitere Details wie Zitate oder Dokumentation hinzuzufügen, damit andere bestätigen können, dass Ihre Antwort richtig ist. Weitere Informationen zum Verfassen guter Antworten finden Sie im Hilfecenter.
– Gemeinschaft Bot
1. Okt. 2021 um 19:41 Uhr
Ich habe versucht, Node-Fetch mit Typoskript zu verwenden, und die Verwendung von Cross-Fetch funktionierte ohne Probleme.
– Parik Tiwari
29. November 2021 um 17:37 Uhr
Das ist die Antwort. Ich habe zu viel Zeit damit verschwendet, es zu machen node-fetch funktionieren (v2 hat keine Typoskripttypen, v3 funktioniert nur in ESM, was in TS in node.js noch nicht gut unterstützt wird, ugh …). cross-fetch funktioniert einfach.
– Mariusz Pawelski
24. Januar 2022 um 11:39 Uhr
Lesen Sie die Dokumente: Wie funktioniert Crossfetch? (…) Wenn Sie sich im Knoten befinden, wird Ihnen die Node-Fetch-Bibliothek angezeigt. Es verwendet Node-Fetch v2, daher sollten Sie Node-Fetch einfach herunterstufen, anstatt eine weitere unnötige Abhängigkeitsebene hinzuzufügen.
– Rafael Tavares
28. Januar 2022 um 16:23
Crossfetch funktioniert nur über httpS
– M22
21. Mai 2022 um 23:26 Uhr
NEUESTES UPDATE MAI 2022
Sie werden möglicherweise nicht benötigt node-fetch mehr.
In der neuesten Version von Node.js (18.0.0), globaler Abruf (experimentell) ist standardmäßig aktiviert.
const res = await fetch('https://nodejs.org/api/documentation.json');
if (res.ok) {
const data = await res.json();
console.log(data);
}
Durch diesen Zusatz werden folgende Globals verfügbar gemacht: fetch, FormData, Headers, Request, Response.
Sie können diese API mit deaktivieren --no-experimental-fetch
Befehlszeilenflag.
Sie können verwenden node-fetch@3 von CommonJS mit dynamischen Importen. Da fetch bereits eine asynchrone API ist, können Sie einen Wrapper wie folgt definieren:
Dieser Trick funktioniert in TypeScript nicht sofort, da TypeScript den dynamischen Import in einen regulären Require umwandelt. Um dies zu umgehen, fügen Sie einfach die Ebene hinzu fetch.js zu Ihrem Projekt hinzufügen und außerdem eine Typdeklaration hinzufügen:
Dieses Modul wurde in der Version in ein reines ESM-Paket umgewandelt 3.0.0-beta.10. node-fetch ist ein reines ESM-Modul – Sie können es nicht mit importieren require. Wir empfehlen Ihnen, hier zu bleiben v2 die mit CommonJS erstellt wird, es sei denn, Sie verwenden ESM selbst. Wir werden weiterhin kritische Fehlerbehebungen dafür veröffentlichen.
Alternativ können Sie auch async verwenden import() Funktion von CommonJS zum Laden node-fetch asynchron:
Sie können also stattdessen diesen Einzeiler verwenden const fetch = require('node-fetch').
Oder anstatt zu versuchen zu laden node-fetchkönnen Sie das Modul installieren und laden node-fetch-commonjs stattdessen. Es handelt sich um einen CommonJS-Wrapper node-fetch Das sollte für Kompatibilität sorgen:
const fetch = require('node-fetch-commonjs')
Weißes Feuer
https://github.com/alex-kinokon/esm-hook hat bei mir gut funktioniert. Fordern Sie es auf, bevor Sie versuchen, Node-Fetch zu importieren. Entweder über –require oder oben in Ihrem Skript.
14537700cookie-checkrequire(‘node-fetch’) gibt ERR_REQUIRE_ESMyes