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

轩辕梓涵 阅读 7

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

我的 Babel 配置是这样的:

{
  "presets": [
    ["@babel/preset-env", {
      "useBuiltIns": "usage",
      "corejs": 3
    }]
  ]
}
我来解答 赞 4 收藏
二维码
手机扫码查看
1 条解答
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