ES2015 "импорт" не работает в node v6.0.0 с параметром --harmony_modules

Я использую node v6.0.0 и хотел использовать ES2016 (ES6). Однако я понял, что синтаксис "import" не работает. Не является ли "импорт" фундаментальным для написания модульного кода в ES2015? Я попытался запустить node с параметром --harmony_modules, но все же получил ту же ошибку об "import" . Вот код.

Рабочий код без "импорта":

'use strict';
let sum = 0;
class Number {

  addNumber(num1, num2) {
    return num1 + num2;
  }
}
let numberObj = new Number();
sum = numberObj.addNumber(1,2);
console.log("sum of two number 1 and 2 "+ sum);

Нерабочий код с "import" :

server.js

'use strict';
import Number from "./Number";

let sum = 0;


let numberObj = new Number();

sum = numberObj.addNumber(1,2);
console.log("sum of two number 1 and 2 "+ sum);

Number.js

'use strict';
export default class Number {

  addNumber(num1, num2) {
    return num1 + num2;
  }
}

Я также проверил http://node.green/, чтобы увидеть поддерживаемый es6, но не смог понять, почему он не работает с параметром --harmony_modules. Пожалуйста, помогите.

Ответ 1

Они еще не реализованы.

Node 6.0.0 использует версию V8 с большей частью функций ES6. К сожалению, модули не являются одной из тех завершенных функций.

node --v8-options | grep harmony 

прогресс флаги гармонии не полностью реализованы и обычно не работают:

- es_staging (включить свойства, совместимые с поддержкой теста (только для внутреннего использования))
--harmony (включить все завершенные функции гармонии)
--harmony_shipping (включить все отправленные функции гармонии)
--harmony_object_observe (включить "harmony Object.observe" ( в процессе))
- harmony_modules (включить "модули гармонии" ( в процессе))
--harmony_function_sent (включить функцию гармонии .sent( в процессе))
--harmony_sharedarraybuffer (включить "harmony sharedarraybuffer" ( в процессе))
--harmony_simd (включить "гармонию simd" ( в процессе))
--harmony_do_expressions (включить "выражения гармонии" ( в процессе))
--harmony_iterator_close (включить "завершение итератора гармонии" ( в процессе))
--harmony_tailcalls (включить "хвосты хвоста гармонии" ( в процессе))
--harmony_object_values_entries (включить "harmony Object.values ​​/Object.entries" ( в процессе))
--harmony_object_own_property_descriptors (включить "harmony Object.getOwnPropertyDescriptors()" ( в процессе))
--harmony_regexp_property (включить "классы свойств regexp для юникода соответствия" ( в процессе))
--harmony_function_name (включить "выражение имени функции гармонии" )
--harmony_regexp_lookbehind (включить "гармонию regexp lookbehind" )
--harmony_species (включить "harmony Symbol.species" )
--harmony_instanceof (включить "поддержка гармонии" )
--harmony_default_parameters (включить "параметры по умолчанию гармонии" )
--harmony_destructuring_assignment (включить "назначение деструкции гармонии" )
--harmony_destructuring_bind (включить "связывание деструкции гармонии" )
--harmony_tostring (включить "гармонию toString" )
--harmony_regexps (включить "расширения регулярного выражения гармонии" )
--harmony_unicode_regexps (включить "согласование unicode regexps" )
--harmony_sloppy (включить "функции гармонии в неаккуратном режиме" )
--harmony_sloppy_let (включить "гармонию в неаккуратном режиме" )
--harmony_sloppy_function (включить "согласование небрежного функционального блока гармонии" )

--harmony_proxies (включить "прокси-серверы гармонии" )
--harmony_reflect (включить "Reflect API гармонии" )
--harmony_regexp_subclass (включить "подклассу регулярного выражения гармонии" )

Ответ 2

Это должен быть комментарий к ответу @Paulpro, но у меня недостаточно отзывов, чтобы опубликовать комментарий.

Для пользователей Windows эквивалентная команда:

node --v8-options | findstr harmony

Ответ 3

Пока модули не реализованы, вы можете использовать Babel transpiler для запуска вашего кода:

npm install --save babel-cli babel-preset-node6
./node_modules/.bin/babel-node --presets node6 ./your_script.js

См. https://www.npmjs.com/package/babel-preset-node6 и https://babeljs.io/docs/usage/cli/

Downsides: это имеет несколько недостатков, например, дополнительное время компиляции, которое может быть значительным, и теперь вам нужны исходные карты для отладки; просто говоря.

Ответ 4

Как указано выше, модули ES6 еще не реализованы.

Похоже, что нетривиальная проблема для реализации модулей ES6 таким образом, чтобы быть обратно совместимым с Common JS modules, который является текущим синтаксисом модуля Node.js.

Однако существует проект проекта, который вводит новое расширение файла - .mjs - для файлов, содержащих модули ES6.

Кроме того, существует встречное предложение , в котором представлен альтернативный подход к объявлению всех файлов с модулями ES6 в package.json следующим образом:

{
    "modules.root": "/path/to/es6/modules"
}