配置 next.js 以使用 Babel 不转换异步函数
Configure next.js to with Babel not to transform async functions
使用默认配置,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
函数转换为生成器,无论如何。
根据 browsers list 文档,我认为 chromium
不是有效目标。尝试将 "chrome": "73"
作为目标。请注意,给定目标的值应该是字符串类型,而不是数字。
如果有一个您不想包含的插件,那么 exclude
键应该让您 blacklist a plugin 否则将根据您提供的目标环境使用它。 "exclude": ["@babel/plugin-transform-regenerator"]
.
提问者的备注
这解决了我的问题。我通过以下方式获得了预期的结果:
{
"presets": [
[
"next/babel",
{
"preset-env": {
"targets": {
"chrome": "73",
"node": "11"
}
}
}
]
]
}
使用默认配置,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
函数转换为生成器,无论如何。
根据 browsers list 文档,我认为 chromium
不是有效目标。尝试将 "chrome": "73"
作为目标。请注意,给定目标的值应该是字符串类型,而不是数字。
如果有一个您不想包含的插件,那么 exclude
键应该让您 blacklist a plugin 否则将根据您提供的目标环境使用它。 "exclude": ["@babel/plugin-transform-regenerator"]
.
提问者的备注
这解决了我的问题。我通过以下方式获得了预期的结果:
{
"presets": [
[
"next/babel",
{
"preset-env": {
"targets": {
"chrome": "73",
"node": "11"
}
}
}
]
]
}