【问题标题】:What does `node --harmony` do?`node --harmony` 有什么作用?
【发布时间】:2012-11-01 08:43:49
【问题描述】:

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

node --harmony app.js

这个和谐标志是什么?它有什么作用,为什么没有它应用程序无法运行?

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

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    在 node js 中启用 Harmony 模块: http://wiki.ecmascript.org/doku.php?id=harmony:modules

    【讨论】:

    • 模块只是和谐的特征之一。
    【解决方案2】:

    输入 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 标准中的非向后兼容功能(如块范围、代理、集合、地图等)

    【讨论】:

    • 值得一提的是Harmony is the name used for the new ECMAscript。 Harmony 命名空间包含 proposals for that language 的功能。
    • 非常感谢!现在一切都说得通了。顺便提一句。任何想法在 Windows 中相当于 man node 是什么? :)
    • @jsalonen 没有,但您可以通过 > node --v8-options 获取此处提及的内容
    • @eis 在 Windows 中有使用--help(或-h)的约定;这适用于大多数控制台程序,因此 node -h 可以工作,即使没有特定的 man 命令。但不适用于“DOS”命令本身;对于那些你可以做help dirhelp set等的人。叹息。
    • @JonCoombs 我认为/? 更多地用于旧的“dos”命令。但无论如何,没有一个标准,我认为我没有看到例如-h 使用太多。
    【解决方案3】:

    如节点文档中所述,--harmony 标志启用了 ES6 的不稳定但即将稳定的特性

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        所有 ECMAScript 2015 (ES6) 功能分为三组,分别用于发布、暂存和进行中的功能:

        • V8 认为稳定的所有发布功能由 Node.js 上的默认设置,不需要任何类型的运行时标志。

        • 阶段性特征,即几乎完成的特征,尚未完成 V8 团队认为稳定,需要运行时标志:--harmony

        • 进行中的功能可以由他们单独激活 各自的和谐标志,尽管这是非常不鼓励的,除非 用于测试目的。注意:这些标志由 V8 公开,并将 可能会在没有任何弃用通知的情况下进行更改。

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

        【讨论】:

          猜你喜欢
          • 2014-03-02
          • 2011-01-28
          • 1970-01-01
          • 2019-04-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-29
          • 1970-01-01
          相关资源
          最近更新 更多