NodeJS planuje wspierać import/eksport modułów es6 (es2015)

Szukałem w Internecie bez jednoznacznej odpowiedzi na to pytanie.

Obecnie NodeJS używa tylko składni CommonJS do ładowania modułów, a jeśli naprawdę chcesz użyć standardowej składni modułów ES2015, musisz ją wcześniej przetworzyć lub użyć zewnętrznego loadera modułów w czasie wykonywania.

Obecnie nie jestem zbyt pozytywny, aby użyć żadnej z tych dwóch metod, czy opiekunowie NodeJS planują w ogóle wspierać Moduły ES2015, czy nie? Nie znalazłem żadnej podpowiedzi na temat to.

W tej chwili NodeJS 6.x twierdzi, że obsługuje 96% funkcji ES2015, ale nie ma żadnego odniesienia do modułów (NodeJS ES2105 support link ).

Czy wiesz, czy NodeJS będzie obsługiwał te moduły po wyjęciu z pudełka, w najbliższej przyszłości?

Author: Bergi, 2016-05-10

1 answers

Aktualizacja 13 Wrzesień 2017

NodeJS 8.5.0 został wydany z obsługą plików mjs za flagą:

node --experimental-modules index.mjs

Plan jest taki, aby usunąć flagę dla wersji 10.0 LTS.

Aktualizacja 8 Wrzesień 2017

NodeJS master branch został zaktualizowany o wstępne wsparcie dla ESM modules:
https://github.com/nodejs/node/commit/c8a389e19f172edbada83f59944cad7cc802d9d5

To powinno być dostępne w najnowszej wersji nocnej (może to być zainstalowane przez nvm , aby działać razem z istniejącą instalacją):
https://nodejs.org/download/nightly/

I włączone za flagą --experimental-modules:

Paczka.json

{
  "name": "testing-mjs",
  "version": "1.0.0",
  "description": "",
  "main": "index.mjs" <-- Set this to be an mjs file
}

Następnie uruchom:

node --experimental-modules .

--Nieaktualne Informacje. Przechowywany w celach historycznych--

Aktualizacja Luty 2017:

Https://medium.com/@jasnell/an-update-on-es6-modules-in-node-js-42c958b890c#.6ye7mtn37

Faceci NodeJS zdecydowali, że najmniej złym rozwiązaniem jest użycie rozszerzenia .mjs. Z tego wynika:

Innymi słowy, biorąc pod uwagę dwa pliki foo.js i bar.mjs, użycie import * from 'foo' potraktuje foo.js jako CommonJS, podczas gdy import * from 'bar' będzie traktować bar.mjs jako moduł ES6

I co do osi czasu...

At w obecnym momencie istnieje jeszcze kilka kwestie specyfikacji i implementacji, które muszą się wydarzyć na ES6 i po stronie maszyny Wirtualnej rzeczy przed węzłem.js może nawet zacząć opracowanie wspierającej implementacji modułów ES6. Praca jest w postęp, ale to zajmie trochę czasu - obecnie szukamy około roku co najmniej.

Aktualizacja Październik 2016:

Jeden z programistów na Node.JS ostatnio uczestniczył w Spotkanie TC-39 i napisał świetny artykuł na temat blokerów do implementacji dla Node.JS:

Https://hackernoon.com/node-js-tc-39-and-modules-a1118aecf95e

Podstawowym wyjściem z tego jest:

  • Moduły ES są analizowane statycznie, CommonJS są oceniane
  • Moduły CommonJS pozwalają na eksport małpek-patching, Moduły ES obecnie nie
  • trudno jest wykryć co to jest moduł ES a co jest CommonJS bez jakiejś formy użytkownika wejście, ale próbują.
  • Jest to najbardziej prawdopodobne rozwiązanie, o ile nie jest w stanie dokładnie wykryć modułu ES bez wprowadzania danych przez użytkownika.]}

-- Oryginalna Odpowiedź --

To był gorący ziemniak od dłuższego czasu. Najważniejsze jest to, że tak, Node ostatecznie będzie obsługiwał składnię ES2015 do importowania / eksportowania modułów - najprawdopodobniej po sfinalizowaniu i uzgodnieniu specyfikacji do ładowania modułów .

Oto dobry przegląd tego, co trzyma NodeJS w górze. Zasadniczo muszą się upewnić, że nowa Specyfikacja działa dla węzła, który jest przede wszystkim warunkowym, synchronicznym ładowaniem, a także HTML, który jest przede wszystkim asynchroniczny.

Nikt nie wie teraz na pewno, ale domyślam się, że Node będzie obsługiwał import/export do ładowania statycznego, oprócz nowego System.import do ładowania dynamicznego - zachowując require dla kodu starszego.

Oto kilka propozycji, jak Node może osiągnąć to:

 270
Author: CodingIntrigue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-13 07:14:28