babel 6 async / await:意外的令牌

时间:2015-11-10 23:24:25

标签: javascript babeljs

我无法获得异步/等待转换工作。 我错过了什么?

我的.babelrc:

{
  "presets": [ "es2015", "stage-0" ]
}

我的package.json(剪辑):

{  
  "babel-core": "^6.1.2",
  "babel-plugin-transform-runtime": "^6.1.2",
  "babel-preset-es2015": "^6.1.2",
  "babel-preset-stage-0": "^6.1.2"
}

输出:

babel src/server
SyntaxError: src/server/index.js: Unexpected token (7:21)
   5 |
   6 | try {
>  7 |   let server = await server('localhost', env.NODE_PORT || 3000)
     |                      ^
   8 |   console.log(`Server started on ${server.info.uri}`)
   9 | } catch (err) {
  10 |   console.error('Error starting server: ', err)

5 个答案:

答案 0 :(得分:12)

根据这篇文章,您需要babel-polyfill

Babel 6 regeneratorRuntime is not defined with async/await

希望它会帮助你:)。

编辑:

它不一定是babel-polyfill,但它是我用过的唯一一个。

正如Gothdo所说:await关键字必须在函数范围内。此外,此函数定义必须具有async关键字。

这意味着您无法在顶级范围内拥有await关键字。

答案 1 :(得分:3)

看起来async / await仅在babel-preset-stage-3

中可用

http://babeljs.io/docs/plugins/preset-stage-3/

答案 2 :(得分:0)

您可以使用transform-async-to-module-method插件自行编译它们,这允许您将它们编译为蓝鸟协同例程,这需要ES6生成器(在node4中可用)。

或者,如果您需要将其编译回ES5,那么它与浏览器兼容,您可以使用transform-async-to-generator和facebook的regenerator

我已经写过关于如何在http://madole.xyz/async-await-es7/

设置您的babel配置的文章

答案 3 :(得分:0)

使用Async to generator transform

安装

$ npm install babel-plugin-transform-async-to-generator

用法

将以下行添加到.babelrc文件中:

{
  "plugins": ["transform-async-to-generator"]
}

答案 4 :(得分:0)

建议升级到Babel 7并使用babel-env而不是阶段(请参见此处:https://github.com/babel/babel-upgrade)。

有一个命令可用于相应升级:

npx babel-upgrade
相关问题