【问题标题】:Configure next.js to with Babel not to transform async functions将 next.js 配置为使用 Babel 不转换异步函数
【发布时间】:2019-08-23 17:07:49
【问题描述】:

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

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

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

  "babel": {
    "presets": [
      [
        "next/babel",
        {
          "preset-env": {
            "targets": {
              "chromium": 73,
              "node": 11
            }
          },
          "transform-runtime": {
            "regenerator": false
          }
        }
      ]
    ]
  }

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

【问题讨论】:

  • 尝试将node: 10添加到targets
  • @evgenifotia 那没用 :(

标签: async-await electron babeljs next.js


【解决方案1】:

我认为chromium 不是browsers list 文档中的有效目标。尝试将"chrome": "73" 作为目标。请注意,给定目标的值应该是字符串类型,而不是数字。

如果有一个您不想包含的插件,那么 exclude 键应该让您 blacklist a plugin 否则将根据您提供的目标环境使用。 "exclude": ["@babel/plugin-transform-regenerator"].

提问者的笔记

这解决了我的问题。我达到了预期的结果:

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

【讨论】:

  • 其中一个想法奏效了!当我找到最小配置时,我会把它放在你的答案中并接受。
  • 调试器让我按预期单步执行awaits!
  • 令人尴尬的是,"chrome": "73" 就够了。但在我的辩护中,在你找出正确的咒语之前,这就像一种炼金术。否则它只是默默地不会做你认为它应该做的事情。
  • 我可以在 Stack Overflow 上说“我爱你”吗?多年来一直在寻求解决这个问题!
  • 如何保持 es6+ 引入的所有特性不变?
猜你喜欢
  • 1970-01-01
  • 2015-06-25
  • 2012-07-25
  • 1970-01-01
  • 2014-03-29
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多