You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Babel以适配ES2021目标环境?

问题分析与解决方案

核心问题原因

你遇到的async/await被强制转译的问题,根源在于配置了fast-async插件——这个插件会无视目标浏览器的支持情况,直接把async/await转译为基于Promise的代码。另外,部分手动添加的插件其实已经被@babel/preset-env覆盖,属于冗余配置。

具体修改步骤

1. 移除fast-async插件

直接删掉babel.config.js中plugins数组里的["module:fast-async", { "spec": true }],同时在package.json的devDependencies中移除fast-async依赖。

2. 调整@babel/preset-env配置

你可以选择两种方式指定目标,效果一致:

  • 方式一:直接指定目标为ES2021
  • 方式二:保留chrome:97(Chrome97原生支持所有ES2021特性)

@babel/preset-env会自动检测目标环境支持的特性,只转译不支持的部分。

3. 移除冗余插件

以下插件不需要手动添加,@babel/preset-env会根据目标环境自动处理:

  • @babel/plugin-proposal-class-properties
  • @babel/plugin-proposal-object-rest-spread
  • @babel/plugin-transform-object-assign

修改后的babel.config.js

module.exports = function (api) {
    api.cache(true);
    return {
        presets: [
            "@babel/preset-react",
            [
                "@babel/preset-env",
                {
                    useBuiltIns: "entry",
                    corejs: "3.25", // 匹配你安装的core-js版本
                    targets: "es2021", // 直接指定ES2021目标,或保留chrome:97
                    modules: false
                }
            ]
        ],
        plugins: [
            ["@babel/plugin-transform-react-jsx", {
                throwIfNamespace: false,
                runtime: "automatic"
            }]
        ]
    }
}

清理package.json中的冗余依赖

从devDependencies中移除以下包:

  • fast-async
  • @babel/plugin-proposal-class-properties
  • @babel/plugin-proposal-object-rest-spread
  • @babel/plugin-transform-object-assign

验证效果

修改完成后重新构建项目,async/await会保留原生语法,??(空值合并运算符)和?.(可选链运算符)也会直接保留——因为Chrome97完全支持这些ES2021特性,Babel不会对其进行转译。

内容的提问来源于stack exchange,提问作者Scott

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 16:42:50