Время летит, и теперь Node.js ver.10.0.0 для публики.Пока я работаю со своим стеком MERN, часто приходится переключаться между синтаксисом ES6 import/export
для внешнего интерфейса (React.JS) и синтаксисом CommonJS module.exports/require
на моей стороне сервера Node / Express.И мне бы очень хотелось, чтобы стиль письма мог быть унифицирован в import/export
в ближайшее время без использования Babel и получения его от нативной поддержки.
Хорошая новость - с прошлого года, когда я прочитал сообщение Джеймсана Medium , что связано с трудностями реализации модульной системы ES6 в Node.js, экспериментальные модули ECMAScript в настоящее время стабильно работают некоторое время, что означает, что его можно включить с помощью флага --experimental-modules
.
Однако, когда я пытаюсь использовать синтаксис import/export
на узле, он никогда не работает.Например, я попробовал это:
import fs from 'fs';
console.log(typeof fs.readFile);
Приведенный выше код выдаст мне ошибку:
(function (exports, require, module, __filename, __dirname) { import fs from 'fs';
^^
SyntaxError: Unexpected identifier
Я действительно уверен, что включил экспериментальный флаг, называемый $node --experimental-modules
Итак, что мне действительно нужно сделать, чтобы запустить экспериментальный модуль ES6 import/export
, работающий на моем локальном сервере Node?Что я пропустил?
Добавлено:
Причина, по которой я хочу попробовать эту экспериментальную функцию, состоит в том, чтобы иметь согласованный стиль кодирования как спереди, так и сзади.И поскольку он теперь доступен изначально, поэтому я хочу подготовиться к нему.Как только это будет достигнуто на этапе 2, я смогу быстро адаптироваться к import/export
и испытывать меньше боли.
Но, очевидно, Google (ref) и AirBnb (ref) имеют разные точки зрения на то, следует ли нам использовать синтаксис import/export
или нет в их руководстве по стилю кода.И, основываясь на Google, я все еще удивляюсь, что семантика импорта / экспорта ES6 еще не завершена, пока ECMA2019 находится в процессе.Мне просто интересно, когда я действительно смогу использовать import/export
в своем проекте, или что действительно нужно завершить?
Обновлено:
Послеуказано Jaromanda X , если я изменил имя своего файла на .mjs
, то это сработает.Первоначально я думал, что модуль для загрузки должен быть назван в расширении .mjs
, но, похоже, я ошибся.Однако, если это так, это означает, что мне нужно будет переименовать все мои файлы проекта в .mjs
... и это не привлекательно.Интересно, есть ли способ использовать эту функцию в традиционном файле .js
?Что я должен настроить?