Nodejs 在 node 上使用 async await 应该编译成 es5 还是 es6?或者是别的方案?

发布于 1周前 作者 yuanlaile 来自 nodejs/Nestjs

Nodejs 在 node 上使用 async await 应该编译成 es5 还是 es6?或者是别的方案?
最近准备用 nodejs 做服务器才真正开始接触 node.js ,以前只是用用各种工具。

想知道大家在项目中使用的时候是怎么做的。

我正在使用 typescript , 2.0 目前只支持将 async 函数编译到 es6 ,因为它的实现需要依赖 generator 、 yield 这些 es6 特性, ts 目前也只能把这些语法编译到 es6 。
即将发布的 typescrit2.1 将能够把 async await yield generator 这些编译到 es5 ,但这样在本身已经支持了 generator 的 node 版本上跑是不是性能会差些。


14 回复

看你运行环境的 node 版本了


你用 node6 不就行了

v4 版本的 async/await 编译过来性能不好,后面就没用了, v6 就不知道了

我只知道 babel 是可以配置的

node 7 这个月底能发布就好了吧

额,对了,其实我应该问的问题是大家都用什么版本的 node 做服务器,现在主流的是什么版本?有兼容性问题么?

嗯, babel 应该是可以的,只要配置需要的 plugins 就行了

没历史包袱就上 node v6 吧,当前 LTS 版本.
node 还比较年轻,社区追新的风气比较严重…
现在的 LTS 的生命周短了点,估计过几年能好点吧
https://github.com/nodejs/LTS

node7 就支持原生 async 了,不过玩玩就行,单数版本不会成为 LTS ,寿命太短了.

嗯,不错的建议,已打算用 v6 。

node 7 已经发布了啊…

node --harmony_async_await app.js

在 Node.js 中使用 async/await 语法时,编译目标的选择主要取决于你的 Node.js 版本以及项目的兼容性需求。async/await 是 ES2017 (ES8) 的特性,因此在支持该特性的 Node.js 版本中,你可以直接使用它而无需编译。

Node.js 版本支持

Node.js 从版本 7.6 开始提供了对 async/await 的实验性支持,并在版本 8.0 中正式稳定支持。如果你的 Node.js 版本是 8.0 或更高,你可以直接使用 async/await,无需将其编译为 ES5 或 ES6。

示例代码

// 使用 async/await 的示例
async function fetchData() {
  try {
    const response = await fetch('https://api.example.com/data');
    const data = await response.json();
    console.log(data);
  } catch (error) {
    console.error('Error fetching data:', error);
  }
}

fetchData();

编译需求

如果你的项目需要在旧版 Node.js 或浏览器环境中运行,你可能需要使用 Babel 等工具将代码编译为 ES5。不过,对于现代 Node.js 项目,尤其是使用最新 LTS 版本的 Node.js,通常不需要这样做。

结论

如果你的 Node.js 版本是 8.0 或更高,建议直接使用 async/await,享受其带来的简洁和可读性。如果你的项目有特殊的兼容性需求,考虑使用 Babel 等工具进行代码转换。在配置 Babel 时,可以根据目标环境选择合适的预设(presets),如 @babel/preset-env

回到顶部