ES2015 "import" 无法在具有 --harmony_modules 选项的节点 v6.0.0 中工作

ES2015 "import" not working in node v6.0.0 with with --harmony_modules option

我正在使用节点 v6.0.0 并想使用 ES2016 (ES6)。但是我意识到 "import" 语法不起作用。 "import" 不是在 ES2015 中编写模块化代码的基础吗?我也尝试了带有 --harmony_modules 选项的 运行 节点,但仍然遇到关于 "import" 的相同错误。这是代码。

没有"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 选项。请帮忙。

只是还没有实现。

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 modules"(进行中))
--harmony_function_sent(启用"harmony function.sent"(进行中))
--harmony_sharedarraybuffer(启用"harmony sharedarraybuffer"(进行中))
--harmony_simd(启用"harmony simd"(进行中))
--harmony_do_expressions(启用"harmony do-expressions"(进行中))
--harmony_iterator_close(启用"harmony iterator finalization"(进行中))
--harmony_tailcalls(启用"harmony tail calls"(进行中))
--harmony_object_values_entries(启用"harmony Object.values / Object.entries"(进行中))
--harmony_object_own_property_descriptors(启用"harmony Object.getOwnPropertyDescriptors()"(进行中))
--harmony_regexp_property(启用"harmony unicode regexp property classes"(进行中))
--harmony_function_name(启用"harmony Function name inference")
--harmony_regexp_lookbehind(启用"harmony regexp lookbehind")
--harmony_species(启用"harmony Symbol.species")
--harmony_instanceof(启用"harmony instanceof support")
--harmony_default_parameters(启用"harmony default parameters")
--harmony_destructuring_assignment(启用"harmony destructuring assignment")
--harmony_destructuring_bind(启用"harmony destructuring bind")
--harmony_tostring(启用"harmony toString")
--harmony_regexps(启用"harmony regular expression extensions")
--harmony_unicode_regexps(启用"harmony unicode regexps")
--harmony_sloppy(启用"harmony features in sloppy mode")
--harmony_sloppy_let(启用"harmony let in sloppy mode")
--harmony_sloppy_function(启用"harmony sloppy function block scoping")
--harmony_proxies(启用"harmony proxies")
--harmony_reflect(启用"harmony Reflect API")
--harmony_regexp_subclass(启用"harmony regexp subclassing")

如上所述,ES6 模块尚未实现。

以与 Common JS 模块向后兼容的方式实现 ES6 模块似乎是一个非常重要的问题,这是当前的 Node.js 模块语法。

但是,有一个 draft 实现,它为包含 ES6 模块的文件引入了新的文件扩展名 - .mjs

此外,还有一个 counter-proposal 提供了一种在 package.json 中使用 ES6 模块声明所有文件的替代方法,如下所示:

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

这应该是对@Paulpro 回答的评论,但我没有足够的代表post评论。

对于Windows用户等同的命令是:

node --v8-options | findstr harmony

在实现模块之前,您可以使用 the 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 and https://babeljs.io/docs/usage/cli/

缺点:这有很多缺点,比如额外的编译时间,这可能很重要,你现在需要源映射来调试;只是说.