【问题标题】:babel 6 async / await: Unexpected tokenbabel 6 async / await:意外的令牌
【发布时间】:2016-02-12 00:22:12
【问题描述】:

我无法让异步/等待转换正常工作。 我错过了什么?

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

【问题讨论】:

  • 您的配置可能将加载程序限制到特定文件夹,例如“客户端”。检查加载程序的包含选项。

标签: javascript babeljs


【解决方案1】:

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

Babel 6 regeneratorRuntime is not defined with async/await

希望对你有帮助:)

编辑:

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

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

这意味着您不能在顶级范围内使用 await 关键字。

【讨论】:

  • 我已经需要包 babel-polyfill,它仍然出错
  • 您的await 行是否在函数范围内?我不确定,但它似乎在标有 async 的函数之外不起作用。
  • @legomind 但它没有在你的 package.json 中列出(你至少发布过)"babel-polyfill": "^6.0.16",
  • 你好。 @legomind,你有没有设法让这个工作?
  • 只要在入口点导入babel-polyfill,只需将 babel 与 stage-0 和 es2015 预设一起使用即可。正如 BrunoLM 所说,请确保您已安装该模块 ;)
【解决方案2】:

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

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

【讨论】:

  • 对不起,stage-0 不应该包含第 3 阶段吗?
【解决方案3】:

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

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

我已经在http://madole.xyz/async-await-es7/http://madole.xyz/async-await-es7/ 上写过如何设置你的 babel 配置

【讨论】:

    【解决方案4】:

    使用Async to generator transform

    安装

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

    用法

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

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

    【讨论】:

      【解决方案5】:

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

      您可以使用一个命令进行相应的升级:

      npx babel-upgrade
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-23
        • 2020-11-16
        • 2016-07-01
        • 2016-11-28
        • 1970-01-01
        • 1970-01-01
        • 2016-08-15
        • 2016-02-18
        相关资源
        最近更新 更多