Ответ 1
UPDATE-2017.11.01 ↓
Загрузка ESM частично приземлилась в node 8.5.0
, который был выпущен в сентябре. См. Документацию по API здесь. Предостережения включают необходимость в флаге --experimental-modules
и использование нового расширения .mjs
для модулей. Вы можете посмотреть полное обсуждение здесь
Все еще есть изменения, которые должны произойти в V8 до того, как загрузка ESM будет стабильной и полнофункциональной, так как с моим исходным ответом я бы посоветовал придерживаться CommonJS require
, если вы еще не используете Babel для других вещей. Смотрите post для более дидактического объяснения
ПРЕДЫДУЩИЙ ОТВЕТ ↓
Две реализации полностью различаются под капотом, поэтому для нее есть нечто большее, чем то, что встречает глаза.
Вывод заключается в том, что все еще сохраняются проблемы/вопросы по спецификациям (вплоть до V8), и как таковые import
в настоящее время не могут быть реализованы в node без использования транспилера
Смотрите этот комментарий (от февраля 2017 года) от одного из автора:
В текущий момент времени все еще существует ряд проблем спецификации и реализации, которые должны произойти на стороне ES6 и виртуальной машины, прежде чем Node.js может даже начать работу по поддержке поддерживающей реализации модулей ES6, Работа ведется, но на это уходит некоторое время - в настоящее время смотрят не менее года.
Имейте в виду, что транспиляторы просто преобразуют синтаксис модуля ES6 в синтаксис модуля CommonJS, поэтому в настоящее время нет преимуществ по производительности. Другими словами, если у вас уже нет конвейера Babel, нет стимулов для создания одного только для использования нового предложенного синтаксиса import
, за исключением проактивной синтаксической перспективы
Подробнее о том, как отличается реализация, см. эту запись