Babel 的 targets 配置到底该怎么写才生效? 令狐煜喆 提问于 2026-02-25 09:18:23 阅读 14 工具 我最近在项目里用 Babel 转译代码,想兼容到 IE11,但发现配置了 targets: { ie: '11' } 后,生成的代码还是用了箭头函数,明显没转成 ES5。是不是我写法有问题? 我的 .babelrc 是这样写的: { "presets": [ ["@babel/preset-env", { "targets": { "ie": "11" } }] ] } 但打包出来的代码里还是有 () => {},这不应该啊?是不是还要配别的选项? 我来解答 赞 2 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 设计师开心 Lv1 你这个配置写法本身没错,但问题出在 Babel 默认只转译语法(syntax),不自动注入 polyfill,所以像箭头函数这种语法,如果目标浏览器支持的话,它就不会转。 但 IE11 明确不支持箭头函数,那为什么没转?因为 @babel/preset-env 默认的 useBuiltIns 是 "usage" 或 "false",得配合 core-js 才能正确处理 polyfill 和语法降级。 你得加两步: 第一,安装依赖: npm install --save-dev @babel/preset-env @babel/core core-js 第二,把 .babelrc 改成这样: { "presets": [ ["@babel/preset-env", { "targets": { "ie": "11" }, "useBuiltIns": "usage", "corejs": 3 }] ] } 注意 useBuiltIns: "usage" 是关键,它会根据你代码里用到的 API 和目标浏览器自动注入需要的 polyfill,同时也会让 Babel 知道“这个浏览器不支持箭头函数”,从而把 () => {} 转成 function () {}。 别忘了你项目里还得 import core-js/stable 和 regenerator-runtime/runtime(如果用了 async/await),或者用 @babel/polyfill(但那个已经废弃了,别用)。 顺带说一句,如果还是不转,可能你用了 Babel 7.4+ 的默认行为,或者 Webpack 里 loader 没走 Babel(比如你只配了 .babelrc,但 Webpack 用的是 babel-loader 的 inline options 覆盖了配置),这种情况得检查下 loader 配置是不是也显式传了 presets。 JS 里这种“看起来配了但没生效”的坑我踩过无数次,真不是你一个人的事,多看一眼生成的 package.json 里有没有 browserslist 字段,有时候它会偷偷覆盖 Babel 的 targets。 回复 点赞 2 2026-02-25 09:26 加载更多 相关推荐 2 回答 32 浏览 Babel配置中设置targets时,为什么指定了浏览器版本却没转译某些语法? 我在项目里用Babel配置了targets为"chrome 90",但发现代码里的箭头函数() => {}仍然没被转译。明明用的是Chrome 80测试时会报错啊,这是怎么回事? 尝试过在.ba... UX文轩 工具 2026-02-16 16:50:25 1 回答 6 浏览 Babel 的 useBuiltIns 配置到底该怎么用? 我最近在项目里配置 Babel,想用 useBuiltIns: 'usage' 来按需引入 polyfill,但发现打包后体积还是很大,而且有些新 API(比如 Array.prototype.fla... 星语 工具 2026-03-01 11:25:23 1 回答 24 浏览 为什么用了@babel/preset-env后箭头函数没被转译? 折腾了一下午还是没解决,项目里用了Babel和@babel/preset-env配置了targets,但箭头函数在打包后居然没转译成普通函数,Chrome没问题,用IE11直接报错。配置文件应该没问题... Mr-金利 工具 2026-02-15 11:48:25 2 回答 46 浏览 Babel配置后箭头函数没转成普通函数,旧版浏览器报错怎么办? 我在项目里用了箭头函数写组件方法,按照教程安装了@babel/preset-env并配置了.babelrc: { "presets": ["@babel/preset-env"] } 但打包后代码里箭... 萌新.文雅 工具 2026-02-15 13:24:30 1 回答 4 浏览 Babel插件里怎么修改AST节点的值? 我在写一个Babel插件,想把代码里的某个字符串字面量替换成别的内容,但改完没生效,是不是哪里搞错了? 比如这段代码: const msg = 'hello world'; console.log(m... 百里瑞雪 工具 2026-03-02 15:18:19 2 回答 16 浏览 Babel插件怎么处理JSX中的自定义组件标签? 我写了个Babel插件想把所有自定义组件(首字母大写的JSX标签)替换成函数调用,但插件好像没生效。我试过匹配JSXOpeningElement节点,判断name.name[0]是不是大写,但调试发现... 继芳🍀 工具 2026-02-25 19:46:21 2 回答 27 浏览 为什么我的Babel配置无法转换ES6箭头函数? 大家好,我在项目里用了Babel转码,但箭头函数一直没被转成ES5语法。配置文件和代码都检查了好几遍,但还是不行... 我的.babelrc配置是这样写的: { "presets": ["@babel... Newb.玉曼 工具 2026-02-18 09:00:37 1 回答 26 浏览 Babel配置了preset-env为什么箭头函数没转译? 我在React项目里配置了@babel/preset-env,但代码里的箭头函数没转译成ES5,这是怎么回事? 项目里用了.babelrc配置: { "presets": ["@babel/prese... Designer°乙涵 工具 2026-02-16 16:33:25 1 回答 40 浏览 Babel配置中如何同时支持ES模块和CommonJS? 我在升级项目Babel配置时遇到了问题。之前用@babel/preset-env默认配置没问题,但今天想让代码同时兼容ES模块和CommonJS时,打包后出现Unexpected token 'exp... 司徒斐然 工具 2026-02-14 13:16:24 2 回答 21 浏览 使用babel-plugin-import按需加载Ant Design为什么样式没生效? 我在项目里用Ant Design时按需编译配置了babel-plugin-import,但样式就是不生效。虽然组件功能正常,但按钮样式全是默认浏览器样式。之前直接引入完整库没问题,改成按需后就出问题了... 皇甫金壵 优化 2026-02-11 02:56:22
但 IE11 明确不支持箭头函数,那为什么没转?因为
@babel/preset-env默认的useBuiltIns是"usage"或"false",得配合core-js才能正确处理 polyfill 和语法降级。你得加两步:
第一,安装依赖:
第二,把
.babelrc改成这样:注意
useBuiltIns: "usage"是关键,它会根据你代码里用到的 API 和目标浏览器自动注入需要的 polyfill,同时也会让 Babel 知道“这个浏览器不支持箭头函数”,从而把() => {}转成function () {}。别忘了你项目里还得 import core-js/stable 和 regenerator-runtime/runtime(如果用了 async/await),或者用
@babel/polyfill(但那个已经废弃了,别用)。顺带说一句,如果还是不转,可能你用了 Babel 7.4+ 的默认行为,或者 Webpack 里 loader 没走 Babel(比如你只配了
.babelrc,但 Webpack 用的是babel-loader的 inline options 覆盖了配置),这种情况得检查下 loader 配置是不是也显式传了presets。JS 里这种“看起来配了但没生效”的坑我踩过无数次,真不是你一个人的事,多看一眼生成的
package.json里有没有browserslist字段,有时候它会偷偷覆盖 Babel 的 targets。