配置了@babel/preset-react为什么还是报JSX语法错误?

令狐瑞芳 阅读 37

刚在React项目里用Babel转译JSX,虽然装了@babel/preset-react,但编译时还是报Unexpected token错误。我的.babelrc配置是这样的:


{
  "presets": ["@babel/preset-env"]
}

尝试过把preset-react加到presets数组里,但打包工具依然识别不了JSX语法。是不是版本不兼容?或者还有其他配置没注意到?

我来解答 赞 11 收藏
二维码
手机扫码查看
2 条解答
令狐梓豪
你贴出来的 .babelrc 配置里面确实只有 @babel/preset-env,并没有 @babel/preset-react。装了依赖不代表 Babel 就会自动去用它,必须在配置文件里显式声明,这是 Babel 官方文档里强调过的标准流程。

先确认一下你有没有安装这个依赖,命令行跑一下:npm install --save-dev @babel/preset-react。然后修改你的配置文件,把 preset 加进去。

正确的 .babelrc 配置应该是这样的:

{
"presets": [
"@babel/preset-env",
"@babel/preset-react"
]
}


这里有个细节要注意,Babel 文档里提到过 Preset 的执行顺序是数组从后往前执行的。虽然 preset-envpreset-react 放在一起通常不会冲突,但按照规范,通常把处理框架语法的 preset 放在后面,或者利用 Babel 的自动顺序处理。重点是这两个都必须在数组里。

另外如果你用的是 React 17 或者更高版本,Babel 文档建议开启新的 JSX Transform,配置可以改成这样:

{
"presets": [
"@babel/preset-env",
["@babel/preset-react", { "runtime": "automatic" }]
]
}


这样就不需要在每个文件开头手动引入 React 了,也是官方目前推荐的写法。改完配置记得重启你的构建工具,清除一下缓存,有时候 Webpack 或者 Node 进程没重启,配置不会生效。
点赞 5
2026-03-01 12:30
俊俊 ☘︎
JSX报错大概率是Babel没正确处理React语法。既然你已经装了@babel/preset-react,那问题应该出在配置没生效。你当前的.babelrc只用了preset-env,没包含preset-react,需要改成这样:

{
"presets": ["@babel/preset-env", "@babel/preset-react"]
}

光装包不加到presets里等于没装。另外检查一下package.json有没有正确依赖,版本不冲突的话一般能解决。如果还报错,可能是构建工具配置漏了Babel loader,React项目得确保webpack或vite这类工具也正确指向Babel配置。
点赞 16
2026-02-07 13:13