80

我正在使用节点 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);

带有“导入”的代码无效:

服务器.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.green/以查看支持的 es6,但无法理解为什么它不能与 --harmony_modules 选项一起使用。请帮忙。

4

4 回答 4

87

它们只是尚未实施。

Node 6.0.0 使用 V8 版本,完成了大部分 ES6 功能。不幸的是,模块不是那些已完成的功能之一。

node --v8-options | grep harmony 

进行中的和谐标志尚未完全实施,通常无法正常工作:

--es_staging(启用值得测试的和谐功能(仅供内部使用))
--harmony(启用所有已完成的和谐功能)
--harmony_shipping(启用所有已交付的和谐功能)
--harmony_object_observe(启用“和谐Object.observe”(在进度))
--harmony_modules(启用“和谐模块”(进行中))
--harmony_function_sent(启用“和谐函数.sent”(进行中) )--
harmony_sharedarraybuffer(启用“和谐sharedarraybuffer”(进行中))
--harmony_simd (启用“和谐 simd”(进行中))
--harmony_do_expressions(启用“harmony do-expressions”(进行中))
--harmony_iterator_close(启用“harmony iterator finalization”(进行中))
--harmony_tailcalls(启用“harmony尾调用”(进行中))
--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_regexp_lookbehind(启用“和谐正则表达式后视”)
--harmony_species(启用“和谐符号.species”)--harmony_instanceof
(启用“和谐实例支持”)
--harmony_default_parameters(启用“和谐默认参数”)
--harmony_destructuring_assignment(启用“和谐解构赋值”)
--harmony_destructuring_bind(启用“和谐解构绑定”)
--harmony_tostring(启用“和谐toString”)
--harmony_regexps(启用“和谐正则表达式扩展”)
--harmony_unicode_regexps(启用“和谐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”)

于 2016-04-27T21:31:23.333 回答
40

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

对于Windows用户,等效命令是:

node --v8-options | findstr harmony
于 2016-07-09T16:28:07.070 回答
32

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

缺点:这有很多缺点,例如额外的编译时间,这可能很重要,您现在需要源映射进行调试;只是说。

于 2016-10-13T09:36:04.173 回答
16

如上所述,ES6 模块还没有实现。

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

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

此外,还有一个反建议提出了一种替代方法,即在 package.json 中声明所有带有 ES6 模块的文件,如下所示:

{
    "modules.root": "/path/to/es6/modules"
}
于 2016-04-28T21:10:30.580 回答