@babel/preset-env 没有按 browserslist 转译 async/await 是怎么回事?

轩辕梓涵 阅读 66

我项目里用了 async/await,browserslist 配置了要兼容到 IE11,但打包后代码里还是原样的 async/await,没被转成 generator。是不是 preset-env 哪里没配对?

我的 Babel 配置是这样的:

{
  "presets": [
    ["@babel/preset-env", {
      "useBuiltIns": "usage",
      "corejs": 3
    }]
  ]
}
我来解答 赞 6 收藏
二维码
手机扫码查看
2 条解答
溢洋 ☘︎
你遇到的问题很常见,让我来帮你梳理一下。首先你需要确保 browserslist 配置正确应用到了 Babel 中。

在你的配置里少了一个关键参数:targets。虽然用 useBuiltInscorejs 做了配置,但还需要明确告诉 Babel 要兼容哪些浏览器。

试试这样修改:
{
"presets": [
["@babel/preset-env", {
"useBuiltIns": "usage",
"corejs": 3,
"targets": "> 0.25%, not dead, not ie <= 10" // 这里明确加入 targets
}]
]
}


另外建议检查根目录下的 .browserslistrc 文件配置是否正确。有时候这个文件的优先级比 Babel 配置更高。

如果还不行,记得看看是不是漏装了 @babel/plugin-transform-runtime 插件,这对 async/await 转译很重要。

这种前端构建问题确实挺烦人,我以前也踩过不少坑,慢慢排查总能解决的。
点赞
2026-03-30 20:00
Des.辽源
你这个问题挺常见的,通常是因为 @babel/preset-env 默认不会转译 async/await 成 ES5 的语法,除非显式地指定它。你的 Babel 配置里缺少了对 async/await 转译的支持。

建议改成这样:

{
"presets": [
["@babel/preset-env", {
"useBuiltIns": "usage",
"corejs": 3,
"targets": "> 0.25%, not dead, ie 11"
}]
]
}


注意 targets 字段,这里指定了要兼容到 IE11。这样 Babel 才会根据你的 browserslist 配置进行相应的转译。另外确保你的 package.json 里有正确的 browserslist 配置,比如:

"browserslist": [
"> 0.25%",
"not dead",
"ie 11"
]


这样配置之后,Babel 应该会正确地将 async/await 转译为支持 IE11 的代码了。希望这能解决你的问题。
点赞
2026-03-24 00:01