babel为什么将异步功能转换为节点8.10的生成器?

时间:2018-09-22 05:13:58

标签: node.js babeljs

如果节点8.10支持异步/等待,为什么babel将异步函数转换为生成器?

babel翻译:

const foo = async () => {
  const b = await bar()
  console.log(b)
}

进入:

const foo = (() => {
  var _ref2 = (0, _asyncToGenerator3.default)(function* () {
    const b = yield bar();
    console.log(b);
  });

  return function foo() {
    return _ref2.apply(this, arguments);
  };
})()

这是我的babel配置:

  "babel": {
    "plugins": [
      "source-map-support",
      "transform-runtime"
    ],
    "presets": [
      [
        "env",
        {
          "targets": {
            "node": "8.10"
          }
        }
      ],
      "stage-3"
    ]
  }

1 个答案:

答案 0 :(得分:1)

您已经通过启用"stage-3"选择了编译异步功能。根据配置,env预设忽略了它们,但是stage-3再次选择了加入。除了其他原因,这就是为什么我们dropped the stage-X presets完全使用Babel 7.x的原因,因为它们难以理解,并且您几乎不知道它们的实际作用。

我的建议是删除stage-3预设,如果其中确实有您想要的插件,请逐个添加。