带有--harmony_modules选项的ES2015“导入”在节点v6.0.0中不起作用


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

无法使用“导入”执行代码:

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选项不起作用。请帮忙。


一起使用Webpack Babel装载机
Naramsim

2
您不需要在v6中使用babel或webpack
chovy



另请参阅来自2016年9月的博客文章,其中介绍了import在节点中实现ES6的挑战。看来ES6模块在节点中交付还有很长的路要走。
jakub.g 2016年

Answers:


87

它们只是尚未实现。

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

node --v8-options | grep harmony 

进行中,和谐标志未完全实现,通常不起作用:

--es_staging(启用值得测试的和声功能(仅供内部使用))
--harmony(启用所有完成的和声功能)
--harmony_shipping(启用所有已运送的和声功能)
--harmony_object_observe(启用“ harmony Object.observe”(在progress))
--harmony_modules(启用“ harmony模块”(进行中))
--harmony_function_sent(启用“ harmony function.sent”(进行中))
--harmony_sharedarraybuffer(启用“ harmony sharedarraybuffer”(进行中))
-- harmony_simd (启用“ harmony simd”(进行中))
--harmony_do_expressions(启用“ harmony do-expressions”(正在进行中))
--harmony_iterator_close(启用“ harmony迭代器完成”(正在进行中))
--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属性类”(正在进行中) )
--harmony_function_name(启用“和解函数名称推断”)

--harmony_regexp_lookbehind(启用“后面的 和谐正则表达式”)--harmony_species(启用“ harmony Symbol.species”)
-- harmony_instanceof (启用“ harmony instanceof support”)
--harmony_default_parameters(启用“ harmony默认参数”)
--harmony_destructuring_assignment(启用“和谐解构分配”)
--harmony_destructuring_bind(启用“和谐解构绑定”)
--harmony_tostring(启用“ harmony toString”)
--harmony_regexps(启用“ harmony正则表达式扩展名”)
--harmony_unicode_regexps(启用“ harmony unicode regexps”)
--harmony_sloppy(启用“在草率模式下的和谐功能”)
--harmony_sloppy_let(启用“以马虎模式调和”
--harmony_sloppy_function(启用“ harmony sloppy功能块作用域”)
--harmony_proxies(启用“ harmony proxies”)
--harmony_reflect(启用“ harmony Reflect API”)
--harmony_regexp_subclass(启用“ harmony regexp子类化”)


13
谢谢。我看到了,但不相信自己是“ import”是es6的重要语法之一
joy

1
@joy是的,希望它很快就会发布。
保罗

4
@KingWu我是node --v8-options | grep harmony在更新到后才通过运行找到它的node 6.0.0
保罗

1
我很高兴听到节点6消失了,现在他们没有实现最重要的功能之一... :(
Kokodoko

1
@SuperUberDuper使用节点7
Ali Gajani

40

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

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

node --v8-options | findstr harmony


16

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

以与向后兼容Common JS模块(即当前的Node.js模块语法)的方式实现ES6模块似乎不是一个简单的问题。

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

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

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

1
我认为这是重要的一点。“存在的力量”仍在争论规范,然后它必须出现在v8中才能到达Node。
保罗·埃弗里特

1
请注意:最新的草稿不需要.mjs作为扩展,这对于兼容性来说要好得多。
马修·迪恩

问题是:在哪里可以找到要下载的这些es6模块?
马克·布里洛

这篇博客文章可能是一个不错的起点。
РоманПарадеев
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.