将 next.js 配置为使用 Babel 不转换异步函数

acj*_*jay 4 async-await babeljs electron next.js

使用默认配置,Next 指示 Babel 在客户端为我的异步函数使用生成器。这使得调试更具挑战性,这看起来应该如此。如何禁用此行为?

我正在使用一个 Electron 应用程序,所以我真的想要最少的转换来匹配 Chromium 运行时。

这是我当前的"babel"关键内容package.json

  "babel": {
    "presets": [
      [
        "next/babel",
        {
          "preset-env": {
            "targets": {
              "chromium": 73,
              "node": 11
            }
          },
          "transform-runtime": {
            "regenerator": false
          }
        }
      ]
    ]
  }
Run Code Online (Sandbox Code Playgroud)

这里的结果是不包含 regenerator,但它在 Webpack 生成的代码中崩溃。如果我取消禁用regenerator,我可以看到资产仍在将async函数转换为生成器,无论如何。

在此处输入图片说明

小智 6

我不认为这chromium是每个浏览器列表文档的有效目标。尝试"chrome": "73"作为目标。请注意,给定目标的值应该是字符串类型,而不是数字。

如果有您不想包含的插件,那么exclude密钥应该让您将一个插件列入黑名单,否则会根据您提供的目标环境使用该插件"exclude": ["@babel/plugin-transform-regenerator"].

提问者的笔记

这解决了我的问题。我通过以下方式达到了预期的结果:

{
  "presets": [
    [
      "next/babel",
      {
        "preset-env": {
          "targets": {
            "chrome": "73",
            "node": "11"
          }
        }
      }
    ]
  ]
}

Run Code Online (Sandbox Code Playgroud)