babel 6 async/await:意外的令牌

babel 6 async / await: Unexpected token

本文关键字:意外 令牌 await async babel      更新时间:2023-09-26

我在异步/等待转换工作时遇到问题。我错过了什么?

我的.babelrc:

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

我的包.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)

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

Babel 6 regeneratorRuntime没有用async/await 定义

希望它能帮助你:)

编辑:

它不一定是巴氏合金填充物,但它是我唯一使用的。

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

这意味着您不能在顶级作用域上使用await关键字。

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

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

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

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

我在这里写了关于如何设置babel配置的文章http://madole.xyz/async-await-es7/

使用异步到生成器转换。

安装

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

用法

.babelrc文件中添加以下行:

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

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

有一个命令可以用来相应地升级:

npx babel-upgrade