因为 await (... of ...) 不工作。 Babel 预设环境,节点 v10

for await (... of ...) not working. Babel present env, node v10

自从我从头开始一个 nodejs 项目以来已经有一段时间了,所以设置和配置 eslint、babel 等有点头疼

现在我的 babelrc 是:

{
  "presets": [
    [
      "env",
      {
        "targets": {
          "node": "10"
        }
      }
    ]
  ],
  "plugins": [
    [
      "transform-runtime",
      {
        "regenerator": true
      }
    ]
  ]
}

package.json 具有开发依赖性:

"babel-cli": "^6.26.0",
"babel-plugin-transform-runtime": "^6.23.0",
"babel-preset-env": "^1.7.0",

现在我想遍历一个对象列表。对于每个,我都需要执行一些我需要 await 的异步任务,所以我做了:

for await (const thing of things) {
  const foo = await doSomethingThatTakesAwhile(thing)
  // etc
}

但是当我在 dev 中 运行 它时(通过 babel-node 的 nodemon)现在 await 出现语法错误:

for await (const thing of things) {
    ^
Syntax Error Unexpected token, expected (
    at Parser.pp.raise (... \node_modules\babylon\lib\index.js:4454:13)
    at Parser.pp.unexpected (... \node_modules\babylon\lib\index.js:1761:8)
    at Parser.pp.expect (... \node_modules\babylon\lib\index.js:1749:33)
    at Parser.pp.parseForStatement (... \node_modules\babylon\lib\index.js:2008:8)
etc..

我是否必须更改我的 babel 配置,and/or 我完全误解了 for/awaitawait/async ?

我相信你需要 babel-plugin-proposal-async-generator-functions 插件来使用 for await 语法。

我找到了另一个我知道 for await of 有效的项目...看起来我使用的是旧的 babel 插件,而不是新的,分离出来的 @babel/xxx 库。在反复安装和卸载东西之后:这是有效的 babelrc:

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": {
          "node": "10"
        }
      }
    ]
  ],
  "plugins": [
    [
      "@babel/plugin-transform-runtime",
      {
        "regenerator": true
      },
      "@babel/preset-env"
    ]
  ]
}

此时我已经安装了所有:

  • @babel/core
  • @babel/node
  • @babel/cli
  • @babel/preset-env
  • @babel/plugin-transform-runtime

然后我运行进入这个问题:https://github.com/meteor/meteor/issues/10128 所以还必须安装与 7.0.0-beta.55 挂钩的 @babel/runtime ... 现在可以构建了!