Fehler [ERR_REQUIRE_ESM]: Wie verwende ich es6-Module in Knoten 12?

Lesezeit: 3 Minuten

Aus https://2ality.com/2019/04/nodejs-esm-impl.html Knoten 12 sollte es6-Module unterstützen; Allerdings erhalte ich immer wieder die Fehlermeldung:

Frage: Wie erstelle ich ein MVP aus der Verwendung von es6-Modulen in Knoten 12?

package.json

{
  "name": "dynamic-es6-mod",
  "version": "1.0.0",
  "description": "",
  "main": "src/index.mjs",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node src/index.mjs"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "globby": "^10.0.1"
  }
}
$ node -v
$ 12.6.0
$ npm run start


internal/modules/cjs/loader.js:821
  throw new ERR_REQUIRE_ESM(filename);
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /Users/dev/dynamic-es6-mod/src/index.mjs
    at Object.Module._extensions..mjs (internal/modules/cjs/loader.js:821:9)
    at Module.load (internal/modules/cjs/loader.js:643:32)
    at Function.Module._load (internal/modules/cjs/loader.js:556:12)
    at Function.Module.runMain (internal/modules/cjs/loader.js:839:10)
    at internal/main/run_main_module.js:17:11

Der offizielle Dokumentation Für das Modul heißt es, dass v2 mit require() verwendet werden soll.

Es gibt eine Lösung obwohl. Anstatt importiert zu werden, kann es auch asynchron geladen werden:

const fetch = (...args) => import('node-fetch').then(({default: fetch}) => fetch(...args));

Sie müssen lediglich die Flagge hinzufügen –experimental-modules Das unterstützt die neue ES6-Import-/Export-Anweisung. Außerdem ist die Reihenfolge wie folgt wichtig.

    "start": "node --experimental-modules src/index.mjs "

  • Das ist nicht richtig. Funktioniert nicht mit NodeJS Version 12 LTS und –experimental-modules wird in der NodeJS-Dokumentation für Version 12 oder 14 nicht erwähnt. Ich denke, diese Option war eine Funktion in der Entwicklung, die entfernt wurde.

    – Neutrino

    10. Juni 2020 um 13:25 Uhr


  • Ja, war laut diesem Artikel eine Funktion vor NodeJS v12.00 medium.com/@nodejs/…

    – Abdulrahman alaa

    11. Juni 2020 um 17:00 Uhr

  • Hat bei mir mit Version 12.16.1 funktioniert, IDK, warum es bei dir nicht funktioniert hat @Neutrino

    – Digender Mahara

    11. Okt. 2020 um 7:34

  • import Jimp from 'jimp'; Verursachte das gleiche Problem, import('jimp').then((jimp) => jimp.read(fileBuffer)) Vielen Dank, Sie haben meinen Tag gerettet

    – Kshitij Kulshrestha

    11. April um 14:38


Benutzer-Avatar von Michal Miky Jankovský
Michal Miky Jankovský

In Knoten 14 Ich habe es mit Workaround gelöst.

Quelle der Problemumgehung: https://github.com/eslint/eslint/issues/12319#issuecomment -535799024

kurze Zusammenfassung:

  1. Ihre Root-Ebene package.json unterstützt kein ESM
  2. Unterverzeichnis tut – in src Verzeichnisort package.json mit { "type": "module" }

PS: Das ESLint-Team kann es derzeit nicht einfach lösen, nur wegen des Kerndesigns … 🙁

Crispengaris Benutzeravatar
Crispengari

Sie müssen diese Codezeile in Ihre package.json-Datei einfügen "type" : "module" Wenn ich Ihre Frage richtig verstehe, können Sie Imports-Anweisungen anstelle von „Require“ verwenden.

Ihre package.json sieht wie folgt aus:

{
  "name": "dynamic-es6-mod",
  "version": "1.0.0",
  "description": "",
  "main": "src/index.mjs",
  "type": "module",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node src/index.mjs"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "globby": "^10.0.1"
  }
}

Benutzeravatar von Mubashir Massing
Mubashir Massing

  1. Gehe zu package.json ablegen und schreiben "type":"module"oben debuggen wie folgt:
"name": "npmmodule",
"version": "1.0.0",
"main": "index.js",
"type": "module",
  1. Verwenden import anstatt require:
import chalk from 'chalk';

console.log(chalk.blue("hello world"));

  • Funktioniert nicht file-type

    – Islam Azab

    3. November 2022 um 12:47 Uhr

Pashs Benutzeravatar
Pasch

Gelöste Verwendung https://www.npmjs.com/package/nanoid-esm

import nanoid from 'nanoid-esm';
console.log(nanoid())```

  • Funktioniert nicht file-type

    – Islam Azab

    3. November 2022 um 12:47 Uhr

Benutzer-Avatar von Jason Henriksen
Jason Henriksen

Mir hat das alles verdammt viel Spaß gemacht. Ich veröffentliche gerade mein Lösungs-Repo, in der Hoffnung, dass es jemand anderem hilft.

Dadurch wird eine ESM-Abhängigkeit (ora) in TypeScript importiert, ohne Babel zu verwenden.
https://github.com/jason-henriksen/typescript-with-esm-no-babel-boilerplate

  • Hallo, ich glaube, ich mache das durch, was du durchgemacht hast. Ich kann Ihre Lösung nicht verstehen. Können Sie das bitte näher erläutern? Außerdem habe ich Ihr Repo noch nicht geklont. Erklärt das die Lösung?

    – Pramod

    30. Dezember 2021 um 5:46 Uhr

1452730cookie-checkFehler [ERR_REQUIRE_ESM]: Wie verwende ich es6-Module in Knoten 12?

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

Privacy policy