Javascript Transfile Async正在等待Babel.js的建议?

Javascript Transfile Async正在等待Babel.js的建议?,javascript,async-await,babeljs,ecmascript-next,Javascript,Async Await,Babeljs,Ecmascript Next,有人建议引入C风格的async wait。我知道Babel.js可以将ES6传输到ES5,但是有没有办法让它异步传输到ES5?Babel v6 从巴贝尔v6开始,巴贝尔不再包含任何变压器。你必须明确你想要转换 预设-非ES2015环境 实现这一点的最快方法是使用预设,这些预设已经包含了转换ES2015和更新方案所需的插件集。对于async,您将需要和预设以及插件(不要忘记安装babel runtime,如文档中所述): 预设-ES2015环境 如果您在支持ES2015(更具体地说,是生成器和承诺

有人建议引入C风格的
async wait
。我知道Babel.js可以将ES6传输到ES5,但是有没有办法让它异步传输到
ES5

Babel v6 从巴贝尔v6开始,巴贝尔不再包含任何变压器。你必须明确你想要转换

预设-非ES2015环境 实现这一点的最快方法是使用预设,这些预设已经包含了转换ES2015和更新方案所需的插件集。对于
async
,您将需要和预设以及插件(不要忘记安装
babel runtime
,如文档中所述):

预设-ES2015环境 如果您在支持ES2015(更具体地说,是生成器和承诺)的环境中运行代码,那么您所需要的只是es2017预设:

{
  "presets": [
    "es2017"
  ]
}
习俗 要仅转换
async
函数,您需要以下插件

在任何情况下都需要能够解析异步函数

为了运行异步函数,您需要使用

  • :将
    async
    函数转换为生成器。这将使用巴贝尔自己的“共同例程”实现
  • :还将
    async
    函数转换为生成器,但将其传递给配置中指定的模块和方法,而不是Babel自己的方法。这允许您使用外部库,例如
    bluebird
如果代码在支持生成器的环境中运行,那么就没有什么可做的了。但是,如果目标环境不支持生成器,则还必须转换生成器。这是通过变换完成的。此转换取决于运行时函数,因此您还需要Babel的转换(+
Babel运行时
包)

示例: 与发电机异步

{
  "plugins": [
    "syntax-async-functions",
    "transform-async-to-generator"
  ]
}
{
  "plugins": [
    "syntax-async-functions",
    "transform-async-to-generator",
    "transform-regenerator",
    "transform-runtime"
  ]
}
异步到模块方法

{
  "plugins": [
    "syntax-async-functions",
   ["transform-async-to-module-method", {
     "module": "bluebird",
     "method": "coroutine"
   }]
  ]
}
与发电机+再生器异步

{
  "plugins": [
    "syntax-async-functions",
    "transform-async-to-generator"
  ]
}
{
  "plugins": [
    "syntax-async-functions",
    "transform-async-to-generator",
    "transform-regenerator",
    "transform-runtime"
  ]
}

巴贝尔v4及以上 是的,您必须启用。巴贝尔使用

用法

$ babel --experimental
$ babel --stage 0


这个解决方案可能自(2月25日Felix Kling)以来发生了变化,或者使用async await的方法仍然不止一种

对我们有效的是这样管理巴贝尔

$ npm install babel-runtime


也许现在更为现代;只需将babel的内容放在一个单独的文件中:

'use strict';

require('babel/register'); // Imports babel - auto transpiles the other stuff
require('./app'); // this is es6 - gets transpiled

有关更多详细信息,请参阅我的代码。

已批准的答案现在似乎已过时。实验旗帜已被弃用,取而代之的是舞台

用法

$ babel --experimental
$ babel --stage 0

第0阶段

  • es7.classProperties
  • es7.理解
第一阶段

  • es7.1.1函数
  • 装饰师
  • es7.1扩展
  • es7.1.1.1.2.1
第2阶段(默认情况下启用第2阶段及以上)

  • es7.1求幂运算符

从今天起,我通过额外的
npm安装babel-preset-stage-0
并像以前一样使用它,实现了这一点

var babel = require("babel-core");
var transpiled = babel.transform(code, { "presets": ["stage-0"] });


正如链接所建议的,您现在必须按阶段或转换器进行设置:babel.transform(“code”,{optional:[“es7.asyncFunctions”]});你与实验变压器的链接断开了。你能确认@MattDell下面的答案吗?@Bergi:事实上,v6又不同了。稍后将更新我的答案。@Bergi看一下下面我的答案。如果我使用
babel.transform(code,{stage:0}).code
,那么我会收到一个
ReferenceError:[babel]未知:未知选项:base.stage
需要如何设置选项?嗯。当我设置上述选项时,似乎对我有效,但从你的答案来看,可能又发生了变化。