Ich habe im ganzen Internet nach einer klaren Antwort darauf gesucht.
Derzeit verwendet NodeJS nur die CommonJS-Syntax zum Laden von Modulen. Wenn Sie die Standard-ES2015-Modulsyntax wirklich verwenden möchten, müssen Sie sie entweder vorher transpilieren oder zur Laufzeit einen externen Modullader verwenden.
Derzeit bin ich nicht zu sicher, eine dieser beiden Methoden zu verwenden. Planen die NodeJS-Betreuer überhaupt, ES2015-Module zu unterstützen, oder nicht? Ich habe überhaupt keinen Hinweis darauf gefunden.
Derzeit gibt NodeJS 6.x an, 96% der ES2015-Funktionen zu unterstützen, es gibt jedoch keinen Verweis auf Module ( NodeJS ES2105-Supportlink ).
Wissen Sie, ob NodeJS diese Module in naher Zukunft sofort unterstützen wird?
javascript
node.js
module
ecmascript-6
es6-modules
Zorgatone
quelle
quelle
node es2015 modules
wird Folgendes als eines der Top-Ergebnisse angezeigt : github.com/nodejs/node/wiki/ES6-Module-Detection-in-Node .Antworten:
Knoten 13.2.0 und höher
NodeJS 13.2.0 unterstützt jetzt ES-Module ohne Flag. 🎉 Die Implementierung ist jedoch weiterhin als experimentell gekennzeichnet. Verwenden Sie sie daher in der Produktion mit Vorsicht.
Fügen Sie Folgendes hinzu, um die ESM-Unterstützung in 13.2.0 zu aktivieren
package.json
:Alle
.js
,.mjs
(oder Dateien ohne Erweiterung) als ESM behandelt werden.Neben dem gesamten
package.json
Opt-In gibt es eine Reihe verschiedener Optionen , die alle in der Dokumentation zu 13.2.0 aufgeführt sind .Knoten 13.1.0 und darunter
Diejenigen, die noch ältere Versionen von Node verwenden, sollten den esm-Modullader ausprobieren , der eine produktionsbereite Implementierung der ES-Modulspezifikation für NodeJS ist:
Detaillierte Updates ...
23. April 2019
Ein PR ist kürzlich gelandet, um die Art und Weise zu ändern, in der ES-Module erkannt werden: https://github.com/nodejs/node/pull/26745
Es befindet sich immer noch hinter der
--experimental-modules
Flagge, aber es gibt wesentliche Änderungen in der Art und Weise, wie Module geladen werden können:package.type
das kann entwedermodule
oder seincommonjs
type: "commonjs"
::.js
wird als commonjs analysierttype: "module"
::.js
wird als esm analysiert--type=[mode]
Damit können Sie den Typ am Einstiegspunkt festlegen. Wirdpackage.type
für den Einstiegspunkt überschrieben ..cjs
.module
Modus.--es-module-specifier-resolution=[type]
explicit
(Standard) undnode
--es-module-specifier-resolution=node
damit den Commonjs Specifier Resolution-Algorithmus aktivieren--experimental-json-loader
"type": "module"
import 'thing.json'
ist, durchlaufen alle den experimentellen Loader unabhängig vom Moduspackage.main
einen Einstiegspunkt für ein Modul festlegen17. Januar 2019
Knoten 11.6.0 listet ES-Module weiterhin als experimentell hinter einem Flag auf.
13. September 2017
NodeJS 8.5.0 wurde mit Unterstützung für MJS-Dateien hinter einem Flag veröffentlicht:
Hierfür ist geplant, das Flag für die Version 10.0 LTS zu entfernen.
- Veraltete Informationen. Wird hier aus historischen Gründen aufbewahrt.
8. September 2017
Der NodeJS-Hauptzweig wurde mit anfänglicher Unterstützung für ESM-Module aktualisiert:
https://github.com/nodejs/node/commit/c8a389e19f172edbada83f59944cad7cc802d9d5
Dies sollte spätestens in der Nacht verfügbar sein (dies kann über nvm installiert werden , um zusammen mit Ihrer vorhandenen Installation ausgeführt zu werden):
https://nodejs.org/download/nightly/
Und hinter der
--experimental-modules
Flagge aktiviert :package.json
Dann renne:
Februar 2017:
https://medium.com/@jasnell/an-update-on-es6-modules-in-node-js-42c958b890c#.6ye7mtn37
Die NodeJS-Leute haben entschieden, dass die am wenigsten schlechte Lösung die Verwendung der
.mjs
Dateierweiterung ist. Das Mitnehmen daraus ist:Und was die Zeitpläne betrifft ...
Oktober 2016:
Einer der Entwickler von Node.JS hat kürzlich an einem TC-39-Meeting teilgenommen und einen hervorragenden Artikel über die Blocker für die Implementierung für Node.JS verfasst:
https://hackernoon.com/node-js-tc-39-and-modules-a1118aecf95e
Das grundlegende Mitnehmen davon ist:
*.mjs
scheint die wahrscheinlichste Lösung zu sein, es sei denn, sie können ein ES-Modul ohne Benutzereingabe genau erkennen- Ursprüngliche Antwort -
Dies ist seit geraumer Zeit eine heiße Kartoffel. Fazit: Ja, Node wird möglicherweise die ES2015-Syntax zum Importieren / Exportieren von Modulen unterstützen - höchstwahrscheinlich, wenn die Spezifikation zum Laden von Modulen fertiggestellt und vereinbart ist.
Hier ist ein guter Überblick darüber, was NodeJS aufhält. Im Wesentlichen müssen sie sicherstellen, dass die neue Spezifikation für Node funktioniert, bei dem es sich hauptsächlich um bedingtes synchrones Laden handelt, und für HTML, das hauptsächlich asynchron ist.
Derzeit weiß niemand genau Bescheid, aber ich kann mir vorstellen, dass Node das
import/export
statische Laden zusätzlich zum neuenSystem.import
für das dynamische Laden unterstützt - und dabei den altenrequire
Code beibehält.Hier sind einige Vorschläge, wie Node dies erreichen könnte:
quelle
.mjs
Erweiterung :We have affectionately called these “Michael Jackson Script” files in the past
. Nur für den Fall, dass Sie während des JS-Gesprächs jemanden über Popkünstler sprechen hören.import * from 'foo'
wird foo.js als CommonJSimport * as bar from 'bar'
behandelt. Bar.js wird als ES6-Modul behandelt. Kann jemand erklären?