0

自从我从头开始一个 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 (nodemon via babel-node) 中运行它时,现在等待出现语法错误:

for await (const thing of things) {
    ^
Syntax Error Unexpected token, expected (
    at Parser.pp$5.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$1.parseForStatement (... \node_modules\babylon\lib\index.js:2008:8)
etc..

我是否必须更改我的 babel 配置,和/或我是否完全误解了 /awaitawait/async

4

2 回答 2

2

我发现了另一个我知道可行的项目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/核心
  • @babel/节点
  • @babel/cli
  • @babel/preset-env
  • @babel/plugin-transform-runtime

然后我遇到了这个问题:https ://github.com/meteor/meteor/issues/10128 所以还必须安装@babel/runtime 并固定在7.0.0-beta.55 ...现在它构建了!!

于 2019-10-18T20:28:54.880 回答
0

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

于 2019-10-18T19:23:46.727 回答