Heim >Web-Frontend >Front-End-Fragen und Antworten >Kann das es-Modul im Knoten ausgeführt werden?
es-Modul kann im Knoten ausgeführt werden; Knoten unterstützt das native es-Modul seit Version 8.5.2. Diese Funktion kann über die Befehlszeilenoption aktiviert werden. Das es-Modul, auch als ECMAScript-Modul bekannt, ist ein JavaScript-Code Wiederverwendungsmechanismus, der jedoch nicht in require() verwendet werden kann, wird im ES-Modul verwendet.
Die Betriebsumgebung dieses Artikels: Windows 10-System, NodeJS-Version 12.19.0, Dell G3-Computer.
Ab Version 8.5.0 beginnt Node.js mit der Unterstützung nativer ES-Module, und diese Funktion kann über Befehlszeilenoptionen aktiviert werden. Die neuen Features sind größtenteils Bradley Farias zu verdanken.
1. Demo
Die Codeverzeichnisstruktur dieses Beispiels ist wie folgt:
esm-demo/ lib.mjs main.mjs
lib.mjs:
export function add(x, y) { return x + y; }
main.mjs:
import {add} from './lib.mjs'; console.log('Result: '+add(2, 3));
Führen Sie die Demo aus:
$ node --experimental-modules main.mjs Result: 5
2. Checkliste: Dinge, die Sie beachten sollten
ES-Modul:
·Sie können Module nicht dynamisch importieren. Die Arbeit an dynamischem import() ist jedoch im Gange und Unterstützung sollte bald verfügbar sein.
·Keine Metavariablen wie __dirname und __filename. Es gibt jedoch einen Vorschlag für eine ähnliche Funktion: „import.meta“. Es könnte so aussehen:
console.log(import.meta.url);
·Jetzt sind alle Modulkennungen URLs (dieser Teil ist neu in Node.js):
·Datei – mit relativem Dateipfad zur Erweiterung : ../util/tools.mjs
· Bibliothek – keine Dateierweiterung und kein Pfad-Lodash
· Wie man NPM-Bibliotheken besser auch in Browsern verfügbar machen kann (ohne Bundler zu verwenden), bleibt abzuwarten. Eine Möglichkeit besteht darin, Konfigurationsdaten im RequireJS-Stil einzuführen, die Pfade tatsächlichen Pfaden zuordnen. Derzeit ist es illegal, Bare-Path-Modul-IDs in Browsern zu verwenden.
Interoperabilität mit CJS-Modulen
Sie können CJS-Module importieren, diese verfügen jedoch immer nur über die Standardexporte – also den Wert von module.exports. Es wird bereits daran gearbeitet, dafür zu sorgen, dass CJS-Module benannte Exporte unterstützen, aber es kann eine Weile dauern. Wenn Sie helfen können, können Sie es tun.
import fs1 from 'fs'; console.log(Object.keys(fs1).length); // 86 import * as fs2 from 'fs'; console.log(Object.keys(fs2)); // ['default']
· Require() kann nicht in ES-Modulen verwendet werden. Die Hauptgründe sind:
· Die Pfadauflösung funktioniert etwas anders: ESM unterstützt NODE_PATH und require.extensions nicht. Auch die Tatsache, dass es sich bei der Kennung immer um eine URL handelt, führt zu geringfügigen Unterschieden.
· ES-Module werden immer asynchron geladen, was maximale Kompatibilität mit dem Web gewährleistet. Dieser Ladestil kann nicht mit dem synchronen Laden von CJS-Modulen über require() gemischt werden.
· Durch das Deaktivieren des synchronen Ladens von Modulen bleibt auch ein Fallback-Pfad für Warteimporte von ES-Modulen auf oberster Ebene übrig (eine Funktion, die derzeit in Betracht gezogen wird).
Empfohlenes Lernen: „nodejs-Video-Tutorial“
Das obige ist der detaillierte Inhalt vonKann das es-Modul im Knoten ausgeführt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!