推荐在项目根目录创建.browserslistrc文件统一配置目标浏览器,babel等工具自动读取并据此决定转译行为;也可写入package.json的browserslist字段,效果相同;应避免在preset-env中重复设置targets以保持各工具行为一致。

直接在项目根目录下创建 .browserslistrc 文件,写入目标浏览器范围,Babel(以及 Autoprefixer、ESLint 等工具)会自动读取并据此决定是否转译语法、是否注入 polyfill。
用 .browserslistrc 统一声明目标环境
这是最推荐的方式,配置一次,全工具生效。文件内容示例:
-
> 0.25%:全球使用率超过 0.25% 的浏览器 -
last 2 versions:每个浏览器的最新两个正式版本 -
not dead:排除官方已停止维护的浏览器(如 IE11 已被标记为 dead) -
Chrome >= 90, Safari >= 15.4:明确指定最低版本
保存后,@babel/preset-env 会自动基于这些条件判断哪些 ES 特性需要转译——比如目标含 Chrome 90+,箭头函数、可选链、模块语法等就完全保留,不生成任何转换代码。
也可以写在 package.json 中
如果偏好集中管理,可在 package.json 的顶层添加 browserslist 字段:
"browserslist": ["> 0.25%", "last 2 versions", "not dead"]
效果与 .browserslistrc 完全一致。Babel 会优先查找 .browserslistrc,找不到才回退到 package.json。
避免在 preset-env 里重复写 targets
一旦用了 browserslist 配置,就不要在 @babel/preset-env 的 options 中再设 targets 字段:
- 写了会覆盖 browserslist,导致其他工具(如 Autoprefixer)和 Babel 行为不一致
- 容易遗漏维护,比如改了 CSS 前缀规则却忘了同步改 JS 转译目标
正确做法是 preset-env 配置保持简洁:
["@babel/preset-env", { "useBuiltIns": "usage", "corejs": 3 }]
它会自动从 browserslist 推导 targets,无需手动干预。
验证配置是否生效
运行以下命令可直观看到当前配置实际匹配了哪些浏览器:
npx browserslist
输出类似 chrome 124, safari 17.5, firefox 126,说明配置已被识别。再配合 DEBUG=babel:* 运行构建,能观察到 preset-env 实际启用了哪些插件——若只显示空列表或极少数插件,说明已接近“零转译”状态。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











