@babel/preset-env 没有转译可选链操作符? 设计师娇娇 提问于 2026-03-10 18:37:18 阅读 2 工具 我用的是 Babel 7,配置了 @babel/preset-env,但代码里的可选链(?.)在打包后居然没被转译,低版本浏览器直接报错。我的 browserslist 配置明明包含了不支持这个语法的浏览器啊。 是不是 preset-env 默认不处理这些新语法?需要额外装什么插件吗? const user = {}; const name = user?.profile?.name; console.log(name); Babel 我来解答 赞 0 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 诸葛东焕 Lv1 这个问题很可能是 @babel/preset-env 版本太旧导致的。可选链的转译支持是在 7.12.0 版本才加入的。 先检查一下你的版本: npm list @babel/preset-env 如果是旧版本,直接升级: npm install @babel/preset-env@latest 另外确认一下你的 babel.config.js 或 .babelrc 配置,targets 要写清楚: module.exports = { presets: [ ['@babel/preset-env', { targets: { chrome: '80', // 换成你需要的低版本 firefox: '74', safari: '13', edge: '80' } }] ] }; 或者直接在 package.json 里配 browserslist,Babel 会自动读取: { "browserslist": [ ">0.2%", "not dead", "not op_mini all" ] } 配置好之后跑一下 build,看打包结果里有没有类似 user == null ? void 0 : user.profile 这种降级代码,有的话就说明转译成功了。 如果升级到最新版本后还是不行,可以试试手动加插件: npm install @babel/plugin-proposal-optional-chaining 然后在配置里加上: plugins: ['@babel/plugin-proposal-optional-chaining'] 不过正常情况下最新版 preset-env 就够了,不用额外加插件。 回复 点赞 2026-03-10 19:03 加载更多 相关推荐 1 回答 13 浏览 @babel/preset-env 没有转译箭头函数,是我配置错了吗? 我在项目里用了 @babel/preset-env,但打包后的代码里还是有箭头函数,低版本浏览器直接报错。我明明设了 targets 啊,是不是哪里没配对? 这是我的 .babelrc 配置: { &... 博主玉鑫 工具 2026-03-03 10:03:18 1 回答 28 浏览 Babel配置了preset-env为什么箭头函数没转译? 我在React项目里配置了@babel/preset-env,但代码里的箭头函数没转译成ES5,这是怎么回事? 项目里用了.babelrc配置: { "presets": ["@babel/prese... Designer°乙涵 工具 2026-02-16 16:33:25 1 回答 27 浏览 为什么用了@babel/preset-env后箭头函数没被转译? 折腾了一下午还是没解决,项目里用了Babel和@babel/preset-env配置了targets,但箭头函数在打包后居然没转译成普通函数,Chrome没问题,用IE11直接报错。配置文件应该没问题... Mr-金利 工具 2026-02-15 11:48:25 2 回答 146 浏览 为什么配置了Babel Presets后箭头函数没被转译? 在Vue项目里安装了@babel/preset-env,配置了.babelrc文件,但箭头函数还是没被转译成普通函数。试过更新Babel版本,检查过浏览器列表配置,打包后代码里箭头函数还是原样,控制台... 慕容艳苹 工具 2026-02-06 02:00:31 2 回答 23 浏览 配置了@babel/preset-react为什么还是报JSX语法错误? 刚在React项目里用Babel转译JSX,虽然装了@babel/preset-react,但编译时还是报Unexpected token错误。我的.babelrc配置是这样的: { "presets... 令狐瑞芳 工具 2026-02-07 13:11:37 1 回答 14 浏览 postcss-preset-env 为什么没把 :focus-visible 转成兼容写法? 我用 postcss-preset-env 处理 CSS,但发现 :focus-visible 伪类在低版本浏览器里没生效。我明明开启了 stage: 3,按理说应该自动 polyfill 才对啊? ... A. 诗雅 工具 2026-02-25 08:09:18 2 回答 48 浏览 Babel配置后箭头函数没转成普通函数,旧版浏览器报错怎么办? 我在项目里用了箭头函数写组件方法,按照教程安装了@babel/preset-env并配置了.babelrc: { "presets": ["@babel/preset-env"] } 但打包后代码里箭... 萌新.文雅 工具 2026-02-15 13:24:30 1 回答 46 浏览 Babel配置中如何同时支持ES模块和CommonJS? 我在升级项目Babel配置时遇到了问题。之前用@babel/preset-env默认配置没问题,但今天想让代码同时兼容ES模块和CommonJS时,打包后出现Unexpected token 'exp... 司徒斐然 工具 2026-02-14 13:16:24 2 回答 63 浏览 为什么配置了Babel的@babel/preset-react后JSX还是无法转换? 我在React项目里用Babel处理JSX,已经安装了@babel/preset-react并配置到.babelrc里了,但打包后浏览器还是报错"Uncaught SyntaxError: Unexp... FSD-倩云 工具 2026-02-05 06:23:27 2 回答 45 浏览 Vue项目用了@babel/preset-typescript为什么还是报TypeScript语法错误? 在Vue3项目里配置了Babel和@babel/preset-typescript,但运行时还是提示“Unexpected token ‘;’ in JSON at position 12”这种错误.... UX炳錦 工具 2026-01-25 20:59:23
先检查一下你的版本:
如果是旧版本,直接升级:
另外确认一下你的 babel.config.js 或 .babelrc 配置,targets 要写清楚:
或者直接在 package.json 里配 browserslist,Babel 会自动读取:
配置好之后跑一下 build,看打包结果里有没有类似
user == null ? void 0 : user.profile这种降级代码,有的话就说明转译成功了。如果升级到最新版本后还是不行,可以试试手动加插件:
然后在配置里加上:
不过正常情况下最新版 preset-env 就够了,不用额外加插件。