Heim  >  Artikel  >  Web-Frontend  >  Einführung in die Verwendung nativer ES-Module in Node.js

Einführung in die Verwendung nativer ES-Module in Node.js

巴扎黑
巴扎黑Original
2017-09-20 09:30:581466Durchsuche

Dieser Artikel stellt hauptsächlich die Verwendung der nativen ES-Modulmethodenanalyse in Node.js vor und enthält Links zu einigen Inhalten. Freunde, die sie benötigen, können darauf verweisen.

Ab Version 8.5.0 unterstützt Node.js native ES-Module, die über Befehlszeilenoptionen aktiviert werden können. Die neuen Features sind größtenteils Bradley Farias zu verdanken.

1. Demonstration

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:

·Module können nicht dynamisch importiert werden. Die Arbeit an dynamischem import() ist jedoch im Gange und Unterstützung sollte bald verfügbar sein.

·Es gibt 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 Modulbezeichner URLs (dieser Teil ist neu in Node.js):

· Datei – relativer Pfad mit Dateierweiterung: ../util/tools.mjs

· Bibliothek – keine Datei Erweiterung und kein Pfad lodash

· Es bleibt abzuwarten, wie npm-Bibliotheken besser auch in Browsern verfügbar gemacht werden können (ohne Bundler zu verwenden). 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 haben jedoch immer nur den Standardexport – also den module.exports-Wert. 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']

· Sie können require() nicht in ES-Modulen verwenden. 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 eine maximale Kompatibilität mit dem Web gewährleistet. Dieser Ladestil kann nicht mit dem synchronen Laden von CJS-Modulen über require() gemischt werden.

· Durch die Deaktivierung des synchronen Ladens von Modulen würde auch ein Fallback-Pfad für Warteimporte von ES-Modulen auf oberster Ebene erhalten bleiben (eine Funktion, die derzeit in Betracht gezogen wird).

3. ES-Module auf früheren Versionen von Node.js

Wenn Sie es auf Node.js-Versionen vor 8.5.0 verwenden möchten ES-Module finden Sie unter @std/esm von John-David Dalton.

Tipp: Wenn Sie keine freischaltbaren Zusatzfunktionen aktivieren, bleiben Sie 100 % kompatibel mit nativen ES-Modulen in Node.js.

FAQ

Wann kann ich ES-Module ohne Befehlszeilenoptionen verwenden?

Der aktuelle Plan sieht vor, ES-Module standardmäßig in Node.js 10 LTS verfügbar zu machen.

Weiterführende Literatur

Weitere Informationen zu Node.js und ES-Modulen im Browser:

· „Transpilierte ES-Module spezifikationsgerechter gestalten“ [ES-Module nativ verwenden vs. über Babel transpilieren]

· „Modulspezifizierer: Was ist neu bei ES-Modulen?“ ?“ [Warum .mjs? Wie werden Modulspezifizierer aufgelöst?]

🎜>
Bevorstehender ECMAScript-Vorschlag:


·

Blog: „ES-Vorschlag: import() – ES-Module dynamisch importieren“

·

Vorschlag: „import.meta“

Das obige ist der detaillierte Inhalt vonEinführung in die Verwendung nativer ES-Module in Node.js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn