ES2015 "импорт" не работает в узле v6. 0. 0 с опцией -- harmony modules


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

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

'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);

Notworking код с "импорт":

сервер.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);

количество.js

'use strict';
export default class Number {

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

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

4 79

4 ответа:

они просто еще не реализовано.

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

node --v8-options | grep harmony 

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

--es_staging (enable test-worthy harmony features (только для внутреннего использования))
-- гармония (включить все завершенные функции гармонии)
-- harmony_shipping (включить все поставляемые функции гармонии)
--harmony_object_observe (включить "объект гармонии.наблюдайте" (в ходе))
-- harmony_modules (включить "модули гармонии" (в ходе))
-- harmony_function_sent (включить " функцию гармонии.отправлено" (в ходе))
-- harmony_sharedarraybuffer (включить "harmony sharedarraybuffer" (в ходе))
--harmony_simd (включить "гармония Симд" (в ходе))
-- harmony_do_expressions (включить "harmony do-expressions" (в ходе))
-- harmony_iterator_close (включить "завершение итератора гармонии" (в ходе))
-- harmony_tailcalls (включить "harmony tail calls" (в ходе))
--harmony_object_values_entries (включить "объект гармонии.значения / объект.записи" (в ходе))
-- harmony_object_own_property_descriptors (включить " объект harmony.getOwnPropertyDescriptors ()" (в ходе))
-- harmony_regexp_property (включить "harmony unicode regexp классы свойств" (в ходе))
-- harmony_function_name (включить "вывод имени функции гармонии")
-- harmony_regexp_lookbehind (включить "harmony regexp lookbehind")
--harmony_species (включить "символ гармонии.вид")
-- harmony_instanceof (включить "harmony instanceof support")
-- harmony_default_parameters (включить "параметры гармонии по умолчанию")
-- harmony_destructuring_assignment (включить "harmony destructuring assignment")
-- harmony_destructuring_bind (включить "harmony destructuring bind")
-- harmony_tostring (включить "harmony toString")
-- harmony_regexps (включить "расширения регулярных выражений harmony")
-- harmony_unicode_regexps (включить " harmony unicode регулярные выражения")
-- harmony_sloppy (включить "функции гармонии в небрежном режиме")
-- harmony_sloppy_let (включить "гармония пусть в небрежном режиме")
-- harmony_sloppy_function (включить "harmony sloppy function block scoping")
-- harmony_proxies (включить "Harmony proxies")
-- harmony_reflect (включить "harmony Reflect API")
-- harmony_regexp_subclass (включить "harmony regexp subclassing")

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

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

node --v8-options | findstr harmony

пока модули не будут реализованы, вы можете использовать Бабеля "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/

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

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

представляется нетривиальной проблемой реализовать модули ES6 таким образом, чтобы они были обратно совместимы с общими модулями JS, которые являются текущим узлом.синтаксис модуля js.

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

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

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