Vite 里怎么配置 esbuild 的 JSX 自动转换? 轩辕华丽 提问于 2026-03-07 18:44:20 阅读 4 前端 我在 Vite 项目里用了 JSX 语法,但没装 Babel,听说 esbuild 能自动处理 JSX。可现在报错说“React is not defined”,是不是哪里没配对? 我试过在 vite.config.js 里加了这个配置: export default { esbuild: { jsxFactory: 'h', jsxFragment: 'Fragment' } } 但还是不行,是不是应该用 jsxInject 或者别的选项?求指点! 构建工具 我来解答 赞 3 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 W″丽萍 Lv1 这个问题其实挺常见的,很多人第一次用 esbuild 处理 JSX 都会遇到。我来分步解释下怎么解决: 首先理解为什么报"React is not defined":就算用 esbuild 处理 JSX,默认情况下它还是假设你在用 React 的 JSX 转换规则。即使你设置了 jsxFactory 为 'h'(比如用 Vue 的 h 函数),还是需要告诉 esbuild 不要自动注入 React。 正确的配置应该是这样: // vite.config.js export default { esbuild: { jsxFactory: 'h', jsxFragment: 'Fragment', jsx: 'transform', // 关键配置:告诉 esbuild 自动转换 JSX jsxInject: import { h } from 'vue' // 按需注入你用的框架的 h 函数 } } 这里需要注意几点: 1. jsx: 'transform' 是必须的,这会启用 esbuild 的 JSX 转换 2. jsxInject 是用来自动注入你需要的模块,比如这里假设你用 Vue,就注入 vue 的 h 函数 3. 如果你用 Preact 或其他库,要把 h 的导入路径改成对应的 如果是 React 项目反而更简单,因为 esbuild 默认就是为 React 设计的,可以直接这样: export default { esbuild: { jsx: 'automatic' // React 17+ 的新 JSX 转换 } } 最后检查下你的文件扩展名,要用 .jsx 或 .tsx,普通的 .js 文件默认不会启用 JSX 转换。 我自己刚开始用的时候也在这卡了半天,后来发现文档里这个配置写得比较隐蔽。如果还有问题可能是依赖没装对,记得检查下是否安装了 vue/preact/react 这些必要的库。 回复 点赞 1 2026-03-07 19:03 加载更多 相关推荐 2 回答 26 浏览 Vite 里怎么自定义 esbuild 的 JSX 配置? 我在用 Vite 搭建 React 项目,想让 esbuild 支持自动导入 React,但改了 build.jsxInject 好像没生效? 试过在 vite.config.js 里加这个配置: e... 技术士俊 前端 2026-02-26 15:47:17 2 回答 43 浏览 Vite+esbuild打包后React动态导入报错找不到模块? 大家好,我在用Vite和esbuild打包生产环境时遇到了奇怪的问题。React组件里用动态导入加载子组件,在开发环境没问题,但打包后控制台报错"Cannot find module './SubCo... 西门远香 工具 2026-02-14 10:24:34 2 回答 23 浏览 Vite+esbuild构建后代码没压缩?配置哪里出问题了? 最近在项目里集成esbuild做代码压缩,但生产构建出来的JS文件完全没变化。按文档配置了esbuild插件,还尝试过手动设置minify选项,但控制台一直提示warning UNKNW: Unkno... UX-燕伟 前端 2026-02-15 20:17:27 1 回答 4 浏览 Vite 的 manualChunks 配置怎么让第三方库单独打包? 我在用 Vite 做项目,想把像 lodash、axios 这些第三方库单独打成 vendor 包,但配置了 manualChunks 后发现它们还是被打进 main.js 里了,根本没拆出来。我试过... 打工人路阳 优化 2026-03-07 16:04:23 2 回答 40 浏览 迁移Vite到4.x后react插件配置报错怎么办? 今天升级Vite到4.x后,react插件配置突然报错了。之前用vite-plugin-react时这样写的: import react from '@vitejs/plugin-react' exp... 哲玮(打工版) 工具 2026-02-17 10:23:28 1 回答 27 浏览 Vite配置Library模式打包后导出的文件无法被其他项目引入怎么办? 我在用Vite的Library模式打包一个工具库时遇到问题,按照文档配置了library选项,但打包生成的umd文件在另一个项目里引入时一直报错:Uncaught TypeError: Cannot ... Air-卫红 前端 2026-02-15 10:24:34 2 回答 30 浏览 Vite+React项目中配置别名后无法导入组件,路径报错怎么办? 在用Vite搭建React项目时,我按文档配置了@别名指向src目录,但导入组件时总提示404错误。比如这样写: // vite.config.js import { defineConfig } f... 迷人的晟华 框架 2026-02-14 19:05:26 2 回答 25 浏览 SWC配置后JSX报错:未定义的useEffect,该怎么解决? 我在Vite项目里用了SWC替代Babel,按照文档配置了@vitejs/plugin-swc,但运行时提示useEffect is not defined。已经确认引入了React,其他配置也没问题... 书生シ奕瑞 前端 2026-02-09 16:48:31 2 回答 60 浏览 为什么配置了Babel的@babel/preset-react后JSX还是无法转换? 我在React项目里用Babel处理JSX,已经安装了@babel/preset-react并配置到.babelrc里了,但打包后浏览器还是报错"Uncaught SyntaxError: Unexp... FSD-倩云 工具 2026-02-05 06:23:27 2 回答 48 浏览 Vite的manualChunks配置后组件还是单独打包怎么办? 我在用Vite开发React项目时,想通过manualChunks把四个公共组件打包到同一个chunk里,但配置后每个组件还是单独生成了文件... 项目结构是这样的,四个组件分布在不同页面: // v... 丹丹 优化 2026-01-30 16:11:34
首先理解为什么报"React is not defined":就算用 esbuild 处理 JSX,默认情况下它还是假设你在用 React 的 JSX 转换规则。即使你设置了 jsxFactory 为 'h'(比如用 Vue 的 h 函数),还是需要告诉 esbuild 不要自动注入 React。
正确的配置应该是这样:
这里需要注意几点:
1. jsx: 'transform' 是必须的,这会启用 esbuild 的 JSX 转换
2. jsxInject 是用来自动注入你需要的模块,比如这里假设你用 Vue,就注入 vue 的 h 函数
3. 如果你用 Preact 或其他库,要把 h 的导入路径改成对应的
如果是 React 项目反而更简单,因为 esbuild 默认就是为 React 设计的,可以直接这样:
最后检查下你的文件扩展名,要用 .jsx 或 .tsx,普通的 .js 文件默认不会启用 JSX 转换。
我自己刚开始用的时候也在这卡了半天,后来发现文档里这个配置写得比较隐蔽。如果还有问题可能是依赖没装对,记得检查下是否安装了 vue/preact/react 这些必要的库。