Ответ 1
Обновление 17 января 2019
Узел 11.6.0 по- прежнему перечисляет модули ES как экспериментальные, за флагом.
Те, кто ищет решение проблемы может понадобиться попробовать ESM модуль загрузчик, который является производством готовой реализацией ES Модули Spec для NodeJS:
node -r esm main.js
Обновление 13 сентября 2017
NodeJS 8.5.0 был выпущен с поддержкой файлов mjs за флагом:
node --experimental-modules index.mjs
План для этого состоит в том, чтобы удалить флаг для выпуска LTS v10.0.
Обновление 8 сентября 2017
Главная ветка NodeJS была обновлена с начальной поддержкой модулей ESM:
https://github.com/nodejs/node/commit/c8a389e19f172edbada83f59944cad7cc802d9d5
Это должно быть доступно в последнюю ночь (это может быть установлено через nvm для запуска вместе с вашей существующей установкой):
https://nodejs.org/download/nightly/
И включен за --experimental-modules
:
package.json
{
"name": "testing-mjs",
"version": "1.0.0",
"description": "",
"main": "index.mjs" <-- Set this to be an mjs file
}
Затем запустите:
node --experimental-modules .
--Outdated Информация. Хранится здесь для исторического purposes--
Обновление февраль 2017:
https://medium.com/@jasnell/an-update-on-es6-modules-in-node-js-42c958b890c#.6ye7mtn37
Ребята из NodeJS решили, что наименее плохим решением является использование .mjs
файла .mjs
. Вывод из этого:
Другими словами, учитывая два файла
foo.js
иbar.mjs
, использованиеimport * from 'foo'
будет рассматриватьfoo.js
как CommonJS, аimport * from 'bar'
будет обрабатыватьbar.mjs
как модуль ES6.
А что касается сроков...
В настоящий момент все еще существует ряд проблем со спецификацией и реализацией, которые должны возникнуть на стороне ES6 и виртуальной машины, прежде чем Node.js сможет даже начать разработку поддерживаемой реализации модулей ES6. Работа продолжается, но это займет некоторое время - в настоящее время мы рассматриваем как минимум год.
Обновление октябрь 2016:
Один из разработчиков на Node.JS недавно присутствовал на собрании TC-39 и написал превосходную статью о блокировщиках для реализации для Node.JS:
https://hackernoon.com/node-js-tc-39-and-modules-a1118aecf95e
Основной вывод из этого:
- Модули ES подвергаются статическому анализу, оцениваются CommonJS
- Модули CommonJS позволяют экспортировать исправления обезьян, в настоящее время модули ES не поддерживают
- Трудно определить, что такое ES-модуль и что такое CommonJS без какой-либо формы пользовательского ввода, но они пытаются.
-
*.mjs
кажется наиболее вероятным решением, если они не могут точно определить модуль ES без ввода данных пользователем
- Оригинальный ответ -
Это была горячая картошка в течение достаточно долгого времени. Суть в том, что да, Node в конечном итоге будет поддерживать синтаксис ES2015 для импорта/экспорта модулей - скорее всего, когда спецификация для загрузки модулей будет завершена и согласована.
Вот хороший обзор того, что держит NodeJS. По сути, они должны убедиться, что новая спецификация работает для Node, который в первую очередь является условной, синхронной загрузкой, а также HTML, который в основном является асинхронным.
Никто не знает наверняка прямо сейчас, но я предполагаю, что Node будет поддерживать import/export
для статической загрузки, в дополнение к новому System.import
для динамической загрузки - при этом сохраняя require
для унаследованного кода.
Вот несколько предложений о том, как Node может достичь этого: