如何在 nodejs 中使用 ES7?

Posted

技术标签:

【中文标题】如何在 nodejs 中使用 ES7?【英文标题】:How can I use ES7 in nodejs? 【发布时间】:2017-10-17 02:06:44 【问题描述】:

如何在 nodejs 中使用 ES7 (ECMAScript 2016)? 如何在生产中使用它?

在哪个版本的节点中,我不需要使用任何模块来做到这一点?

感谢任何帮助。

【问题讨论】:

您是真的在谈论 ES7 (ES2016)(如果您现在不知道这到底是什么意思,请阅读标签说明)还是在谈论实验性功能(接下来是 ES)? 谢谢菲利克斯,我已经编辑过了。 【参考方案1】:

注意:这个问题明确是关于 ES2016 (ES7)。请参阅下面的 ES2017 (ES8) 更新。

ES7 只有两个主要特性:

    Array.prototype.includes **(求幂运算符)

有关更多信息,请参阅 Mozilla 开发网络:

Web/javascript/Reference/Global_Objects/Array/includes Web/JavaScript/Reference/Operators/Arithmetic_Operators#Exponentiation_(**)

根据 node.green,这些在 Node 中可用,分别是:

5.0 带和谐标志和 6.0 不带标志 (Array.prototype.includes) 6.5 带和谐标志,7.0 不带标志(求幂)

见:

http://node.green/#ES2016-features-Array-prototype-includes http://node.green/#ES2016-features-exponentiation------operator

求幂是添加到 Node 中的最后一个 ES7 功能,因此如果您想使用没有标志的所有 ES7 功能,那么您至少需要 Node 7.0。如果您可以使用 --harmony 标志,那么您至少可以使用 Node 6.5。

6.x 版本是 LTS(长期支持),因此您可能希望它优于 7.x,但您需要使用 ES7 功能的标志。

在撰写本文时,Node 的当前版本是:

v6.10.3 LTS(推荐给大多数用户) v7.10.0 当前(最新功能)

v8.0 LTS 即将发布 - 目前您可以使用 Node 8.0 的夜间版本。

有关发布时间表的更多信息 - 请参阅:

https://github.com/nodejs/LTS

要下载其他版本 - 请参阅:

https://nodejs.org/en/download/

ES2017 更新

回答 cmets 的问题,async/await 是 ES2017 (ES8) 的特性,而不是 ES2016 (ES7) 的特性。见:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
规范:ECMAScript 最新草案 (ECMA-262) 该规范中“异步函数”的定义。 状态:草稿 注释:ES2017 中的初始定义。

Node 中的异步/等待

您可以在以下位置使用 async/await:

带有 --harmony 标志的节点 7.0 没有任何标志的节点 7.6

更多信息见:

http://node.green/#ES2017-features-async-functions

在你没有原生支持 asyncawait 的地方你可以使用 Babel:

https://babeljs.io/docs/plugins/transform-async-to-generator/

或者在语法稍有不同的情况下使用基于生成器的方法,例如 co 或 Bluebird 协程:

https://www.npmjs.com/package/co http://bluebirdjs.com/docs/api/promise.coroutine.html

查看这些答案了解更多信息:

try/catch blocks with async/await node.js ~ constructing chained sequence of Promise resolves How to run Generator Functions in Parallel? node.js ~ constructing chained sequence of Promise resolves Using async/await + Bluebird to promisifyAll jQuery: Return data after ajax call success

它们包含有关兼容性和可能的​​解决方法的更多信息。

【讨论】:

async/await 功能怎么样? @MajidParvin:这仍然是实验性的(不是 ES7 的一部分)将于今年与 ES2017 一起发布。 @MajidParvin async/await 是 ES2017 (ES8) 的一个特性——而不是这个问题所涉及的 ES2016 (ES7)。查看更新的答案 - 我添加了关于 ES2017 和 async/await 的信息。【参考方案2】:

有这个网站http://node.green/,展示了不同版本的NodeJS与不同版本的ES标准的兼容程度。

【讨论】:

【参考方案3】:

例如,您需要使用 --harmony 标志:

node --harmony server.js

【讨论】:

以上是关于如何在 nodejs 中使用 ES7?的主要内容,如果未能解决你的问题,请参考以下文章

NodeJs使用asyncAwait两法

如何使用 ES6/ES7 语法导入 jQuery UI?

ES7 - 如何停止(剪切)异步/等待链接

如何评价node

NodeJs爬虫抓取古代典籍,共计16000个页面心得体会总结及项目分享

如何看待 TJ 宣布退出 Node.js 开发,转向 Go?