„Import” z ES2015 nie działa w węźle 6.0.0 z opcją --harmony_modules

80

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_modulesopcją, 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óż.

radość
źródło
używaj Webpack razem Babel loader
Naramsim
2
Nie powinieneś potrzebować babel ani webpacka w wersji 6
chovy
Zobacz także ten wpis na blogu z września 2016 r. Wyjaśniający wyzwania związane z wdrażaniem ES6 importw węźle. Wygląda na to, że jeszcze daleko nam do pojawienia się modułów ES6 w węźle.
jakub.g

Odpowiedzi:

87

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.

node --v8-options | grep harmony 

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”)


Paweł
źródło
13
Dzięki. Widziałem to, ale nie wierzyłem w siebie, że „import” jest jedną z ważnych składni es6
radość
1
@ Enjoy Yeah, miejmy nadzieję, że wkrótce będzie dostępny.
Paul
4
@KingWu Właśnie go znalazłem, uruchamiając node --v8-options | grep harmonypo aktualizacji do node 6.0.0.
Paul
1
Bardzo się ucieszyłem, słysząc, że węzeł 6 został wyłączony, a teraz nie zaimplementował jednej z najważniejszych funkcji ... :(
Kokodoko
1
@SuperUberDuper Użyj węzła 7
Ali Gajani,
40

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:

node --v8-options | findstr harmony
CodeVortex
źródło
16

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
1
Myślę, że to ważny punkt. „The Powers That Be” nadal spierają się o specyfikację, a następnie musi ona pojawić się w wersji 8, zanim będzie mogła dotrzeć do Node.
Paul Everitt,
1
Uwaga: najnowsza wersja robocza nie wymaga .mjsrozszerzenia, co jest znacznie lepsze pod względem kompatybilności.
Matthew Dean
Pytanie brzmi: gdzie mogę znaleźć te moduły es6 do pobrania?
Marc Brillault
Ten wpis na blogu może być dobrym miejscem do rozpoczęcia.
Роман Парадеев