ES2015“导入”在节点v6.0.0中不能与--harmony_modules选项一起使用

时间:2016-04-27 21:22:26

标签: javascript node.js ecmascript-6 es6-modules

我正在使用node v6.0.0并想使用ES2016(ES6)。但是我意识到“导入”语法不起作用。在ES2015中编写模块化代码不是“导入”的基础吗?我尝试使用--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选项一起使用。请帮忙。

4 个答案:

答案 0 :(得分:87)

他们还没有实施。

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

node --v8-options | grep harmony 

正在进行中和谐标志未完全实施且通常无效:

- es_staging(启用值得测试的和声功能(仅供内部使用))
   - 和谐(启用所有已完成的和声功能)
  --harmony_shipping(启用所有发运的和声功能)
  --harmony_object_observe(启用“和谐对象。观察”(正在进行中))
   - harmony_modules (启用“和声模块”(正在进行中))
  --harmony_function_sent(启用“和声功能。发送”(正在进行中))
  --harmony_sharedarraybuffer(启用“harmony sharedarraybuffer”(正在进行中))
  --harmony_simd(启用“和谐simd”(正在进行中))
  --harmony_do_expressions(启用“和谐表达式”(正在进行中))
  --harmony_iterator_close(启用“和声迭代器终结”(正在进行中))
  --harmony_tailcalls(启用“和声尾调用”(正在进行中))
  --harmony_object_values_entries(启用“和谐Object.values / Object.entries”(正在进行中))
  --harmony_object_own_property_descriptors(启用“和谐Object.getOwnPropertyDescriptors()”(正在进行中))
  --harmony_regexp_property(启用“和声unicode regexp属性类”(正在进行中))
  --harmony_function_name(启用“和声功能名称推断”)
  --harmony_regexp_lookbehind(启用“和谐regexp lookbehind”)
  --harmony_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(启用“和谐反映API”)
  --harmony_regexp_subclass(启用“和谐regexp子类化”)

答案 1 :(得分:40)

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

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

node --v8-options | findstr harmony

答案 2 :(得分:32)

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

下行:这有各种各样的缺点,比如额外的编译时间,这可能很重要,你现在需要源地图进行调试;只是说。

答案 3 :(得分:16)

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

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

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

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

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