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?
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
ibar.mjs
, użycieimport * from 'foo'
potraktujefoo.js
jako CommonJS, podczas gdyimport * 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:
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