`node --harmony`有什么作用?

时间:2012-11-12 21:36:47

标签: javascript node.js

节点应用程序要求我运行带有和声标志的节点,例如:

node --harmony app.js

这个和谐旗帜是什么?它做了什么以及为什么没有应用程序就无法运行它?

我已尝试查看节点命令行选项(node --help),但它也没有提供任何细节。节点文档也没有任何帮助。

5 个答案:

答案 0 :(得分:127)

在和声标志上打字man node

 --harmony_typeof (enable harmony semantics for typeof)
       type: bool  default: false
 --harmony_scoping (enable harmony block scoping)
       type: bool  default: false
 --harmony_modules (enable harmony modules (implies block scoping))       
        type: bool  default: false
 --harmony_proxies (enable harmony proxies)       
        type: bool  default: false
 --harmony_collections (enable harmony collections  (sets,  maps,  andweak maps))
       type: bool  default: false 
 --harmony (enable all harmony features (except typeof))
       type: bool  default: false

所以--harmony是启用所有和声功能的快捷方式(例如--harmony_scoping--harmony_proxies等。)从this blog post开始,似乎和谐启用了新的ECMAScript 6功能在语言中。你的文件在没有和谐的情况下运行的原因是因为app.js可能正在使用新ECMAScript 6标准中的非向后兼容功能(如块范围,代理,集合,地图等)。

答案 1 :(得分:5)

如果要在旧版本的nodejs中运行ECMAScript 6功能,可以使用--harmony flag。 最新版本的节点支持ES6,因此不需要--harmony flag

答案 2 :(得分:4)

它在节点js中启用和声模块: http://wiki.ecmascript.org/doku.php?id=harmony:modules

答案 3 :(得分:3)

如节点文档中所述, - hash标志启用了ES6的非稳定但很快稳定的功能

  

Node.js上--harmony标志的当前行为是仅启用分阶段功能。毕竟,它现在是--es_staging的同义词。如上所述,这些是尚未被认为稳定的完整特征。如果您想要安全地玩,特别是在生产环境中,请考虑删除此运行时标志,直到它默认发布在V8上,因此在Node.js上发布。如果启用此功能,您应该为进一步的Node.js升级做好准备,以便在V8更改其语义时更加严格遵循标准,从而破坏您的代码。

答案 4 :(得分:1)

所有ECMAScript 2015(ES6)功能均分为三组,分别用于运输,暂存和进行中功能

    V8认为稳定的
  • 所有运输功能通过以下方式开启 默认为Node.js,并且不需要任何类型的运行时标志。

  • 分段功能,它们是几乎完成的功能,不是 被V8小组认为是稳定的,需要一个运行时标志:- harmony

  • 可以分别通过
  • 正在进行的功能来激活它们 各自的和声旗,尽管不鼓励这样做,除非 用于测试目的。注意:这些标志由V8公开,并且会 可能会更改,而不会发出任何弃用通知。

来源https://nodejs.org/en/docs/es6/