Ich verwende den Knoten v6.0.0 und wollte ES2016 (ES6) verwenden. Ich habe jedoch festgestellt, dass die "Import" -Syntax nicht funktioniert. Ist "Importieren" nicht grundlegend für das Schreiben von modularem Code in ES2015? Ich habe versucht, Node auch mit --harmony_modules
Option auszuführen, habe aber immer noch den gleichen Fehler bezüglich "Import" erhalten. Hier ist der Code.
Arbeitscode ohne "Import":
'use strict';
let sum = 0;
class Number {
addNumber(num1, num2) {
return num1 + num2;
}
}
let numberObj = new Number();
sum = numberObj.addNumber(1,2);
console.log("sum of two number 1 and 2 "+ sum);
Nicht funktionierender Code mit "Import":
server.js
'use strict';
import Number from "./Number";
let sum = 0;
let numberObj = new Number();
sum = numberObj.addNumber(1,2);
console.log("sum of two number 1 and 2 "+ sum);
Number.js
'use strict';
export default class Number {
addNumber(num1, num2) {
return num1 + num2;
}
}
Ich habe auch http://node.green/ überprüft , um das unterstützte es6 zu sehen, konnte jedoch nicht verstehen, warum es mit der Option --harmony_modules nicht funktioniert. Bitte helfen Sie.
import
in Node erläutert werden. Es scheint, dass wir noch einen langen Weg vor dem Versand der ES6-Module im Knoten sind.Antworten:
Sie sind einfach noch nicht implementiert.
Knoten 6.0.0 verwendet eine Version von V8, wobei die meisten ES6-Funktionen abgeschlossen sind. Leider gehören Module nicht zu diesen abgeschlossenen Funktionen.
In Bearbeitung Harmony Flags sind nicht vollständig implementiert und funktionieren normalerweise nicht:
--es_staging (testwürdige Harmoniefunktionen aktivieren ( nur für den internen Gebrauch ))
--harmony (alle abgeschlossenen Harmoniefunktionen
aktivieren ) --harmony_shipping (alle ausgelieferten Harmoniefunktionen
aktivieren ) --harmony_object_observe (aktiviere "harmony Object.observe" ( in progress ))
--harmony_modules (aktiviere "harmony modules" ( in Bearbeitung ))
--harmony_function_sent (aktiviere "harmony function.sent" ( in Bearbeitung ))
--harmony_sharedarraybuffer (aktiviere "harmony sharedarraybuffer" ( in Bearbeitung ))
--harmony_simd (aktiviere "harmony simd" ( in Bearbeitung ))
--harmony_do_expressions (aktiviere "Harmony Do-Ausdrücke" ( in Bearbeitung ))
--harmony_iterator_close (aktiviere "Harmony Iterator Finalization" ( in Bearbeitung ))
--harmony_tailcalls (aktiviere "Harmony Tail Calls" ( in Bearbeitung ))
--harmony_object_values_entries ( in Bearbeitung ) aktiviere "harmony Object.values / Object.entries" ( in Bearbeitung ))
--harmony_object_own_property_descriptors (aktiviere "harmony Object.getOwnPropertyDescriptors ()" ( in Bearbeitung ))
--harmony_regexp_property (aktiviere "harmony unicode regexp property classes" ( in Bearbeitung ) )
--harmony_function_name (enable "Harmonie Funktionsname Inferenz ")
--harmony_regexp_lookbehind (aktiviere "harmony regexp lookbehind")
--harmony_species (aktiviere "harmony Symbol.species")
--harmony_instanceof (aktiviere "harmony instanceof support")
--harmony_default_parameters (aktiviere "harmony default parameters")
--harmony_destructuring_assignment "Harmony Destructuring Assignment")
--harmony_destructuring_bind (aktivieren Sie "Harmony Destructuring Bind")
--harmony_tostring (aktivieren Sie "Harmony toString")
--harmony_regexps (aktivieren Sie "Harmony Regular Expression Extensions")
--harmony_unicode_regexps (aktivieren Sie "Harmony Unicode Regexps"
--harmony_sloppy (aktiviere "Harmony-Funktionen im Sloppy-Modus")
--harmony_sloppy_let (aktiviere "Harmonie im schlampigen Modus")
--harmony_sloppy_function (aktiviere "Harmony Sloppy Function Block Scoping")
--harmony_proxies (aktiviere "Harmony Proxies")
--harmony_reflect (aktiviere "Harmony Reflect API")
--harmony_regexp_subclass (aktiviere "Harmony Regexp Subclassing")
quelle
node --v8-options | grep harmony
nach dem Update auf ausgeführt habenode 6.0.0
.Dies sollte ein Kommentar zu @ Paulpros Antwort sein, aber ich habe nicht genug Vertreter, um einen Kommentar zu schreiben.
Für Windows- Benutzer lautet der entsprechende Befehl:
quelle
Bis zur Implementierung von Modulen können Sie den Babel "Transpiler" verwenden , um Ihren Code auszuführen:
Siehe https://www.npmjs.com/package/babel-preset-node6 und https://babeljs.io/docs/usage/cli/
Nachteile : Dies hat verschiedene Nachteile, wie z. B. zusätzliche Kompilierungszeit, die erheblich sein können, und Sie benötigen jetzt Quellzuordnungen zum Debuggen. nur sagen.
quelle
Wie oben erwähnt, sind ES6-Module noch nicht implementiert.
Es scheint kein triviales Problem zu sein, ES6-Module so zu implementieren, dass sie mit Common JS-Modulen abwärtskompatibel sind. Dies ist die aktuelle Node.js-Modulsyntax.
Es gibt jedoch einen Entwurf einer Implementierung, die eine neue Dateierweiterung -
.mjs
- für Dateien mit ES6-Modulen einführt .Es gibt auch einen Gegenvorschlag , der einen alternativen Ansatz zum Deklarieren aller Dateien mit ES6-Modulen in package.json wie folgt darstellt:
{ "modules.root": "/path/to/es6/modules" }
quelle
.mjs
Erweiterung, was aus Kompatibilitätsgründen viel besser ist.