Używam węzła v6.0.0 i chciałem używać ES2016 (ES6). Jednak zdałem sobie sprawę, że składnia „importu” nie działa. Czy „import” nie jest podstawą do pisania kodu modułowego w ES2015? Próbowałem również uruchomić węzeł z --harmony_modules
opcją, ale nadal otrzymuję ten sam błąd dotyczący „importu”. Oto kod.
Kod roboczy bez „importu”:
'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);
Niedziałający kod z „importem”:
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;
}
}
Sprawdziłem również http://node.green/, aby zobaczyć obsługiwane es6, ale nie jestem w stanie zrozumieć, dlaczego nie działa z opcją --harmony_modules. Proszę pomóż.
import
w węźle. Wygląda na to, że jeszcze daleko nam do pojawienia się modułów ES6 w węźle.Odpowiedzi:
Po prostu nie zostały jeszcze wdrożone.
Węzeł 6.0.0 korzysta z wersji V8 z ukończoną większością funkcji ES6. Niestety moduły nie są jedną z tych ukończonych funkcji.
flagi harmonii w toku nie są w pełni zaimplementowane i zwykle nie działają:
--es_staging (włącz testowe funkcje harmonii (tylko do użytku wewnętrznego ))
--harmony (włącz wszystkie ukończone funkcje harmonii)
--harmony_shipping (włącz wszystkie dostarczone funkcje harmonii)
--harmony_object_observe (włącz "harmony Object.observe" ( w progress ))
--harmony_modules (włącz "moduły harmonii" ( w trakcie ))
--harmony_function_sent (włącz "harmony function.sent" ( w trakcie ))
--harmony_sharedarraybuffer (włącz "harmony sharedarraybuffer" ( w trakcie ))
--harmony_simd (włącz "harmony simd" ( w toku ))
--harmony_do_expressions (włącz "wyrażenia do harmonii "(w toku ))
--harmony_iterator_close (włącz "finalizację iteratora harmonii" ( w toku ))
--harmony_tailcalls (włącz "wywołania ogona harmonii" ( w toku ))
--harmony_object_values_entries (włącz "harmony Object.values / Object.entries" ( w toku ))
--harmony_object_own_property_descriptors (włącz "harmony Object.getOwnPropertyDescriptors ()" ( w toku ))
--harmony_regexp_property (włącz "harmony unicode regexp property classes" ( w trakcie ) ) --harmony_function_name (włącz "harmonia wnioskowanie o nazwie funkcji ”) --harmony_regexp_lookbehind (włącz "harmony reindgexp") - harmony_species (włącz "Harmony Symbol.species")
--harmony_instanceof (włącz "harmony instanceof support")
--harmony_default_parameters (włącz "domyślne parametry harmonii")
--harmony_destruifying_assignment (włącz "harmony
destruifying assignment") --harmony_destruifying_bind (włącz "harmony
destruifying bind") --harmony_tostring (włącz " harmony toString ")
--harmony_regexps (włącz" rozszerzenia wyrażeń regularnych harmonii ") --harmony_unicode_regexps (włącz" wyrażenia regularne
harmonii unicode ")
--harmony_sloppy (włącz" funkcje harmonii w trybie niechlujnym ")
--harmony_sloppy_let (włącz" harmony niech niechluje mode ")harmony sloppy function scoping ") --harmony_proxies (włącz" Harmony proxy ")
--harmony_sloppy_function (włącz „harmony sloppy function scoping ”) --harmony_reflect (włącz „harmony Reflect API”) --harmony_regexp_subclass (włącz „podklasę wyrażeń regularnych harmonii”)
źródło
node --v8-options | grep harmony
po aktualizacji donode 6.0.0
.To powinien być komentarz do odpowiedzi @ Paulpro, ale nie mam wystarczającej liczby przedstawicieli, aby opublikować komentarz.
W przypadku użytkowników systemu Windows równoważne polecenie to:
źródło
Dopóki moduły nie zostaną zaimplementowane, możesz użyć „transpilera” Babel do uruchomienia kodu:
Zobacz https://www.npmjs.com/package/babel-preset-node6 i https://babeljs.io/docs/usage/cli/
Wady : ma to różne wady, takie jak dodatkowy czas kompilacji, który może być znaczący i teraz potrzebujesz map źródeł do debugowania; tylko mówię.
źródło
Jak wspomniano powyżej, moduły ES6 nie zostały jeszcze zaimplementowane.
Wydaje się, że nietrywialnym problemem jest implementacja modułów ES6 w sposób, który byłby wstecznie kompatybilny z modułami Common JS, co jest obecną składnią modułu Node.js.
Istnieje jednak szkic implementacji, który wprowadza nowe rozszerzenie pliku -
.mjs
- dla plików zawierających moduły ES6.Istnieje również kontrpropozycja, która przedstawia alternatywne podejście do deklarowania wszystkich plików z modułami ES6 w package.json w następujący sposób:
{ "modules.root": "/path/to/es6/modules" }
źródło
.mjs
rozszerzenia, co jest znacznie lepsze pod względem kompatybilności.