Vite 里怎么自定义 esbuild 的 JSX 配置? 技术士俊 提问于 2026-02-26 15:47:17 阅读 22 前端 我在用 Vite 搭建 React 项目,想让 esbuild 支持自动导入 React,但改了 build.jsxInject 好像没生效? 试过在 vite.config.js 里加这个配置: export default { esbuild: { jsxInject: <code>import React from 'react'</code> } } 但还是报 “React is not defined” 的错,是不是写法不对? 我来解答 赞 3 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 瑞云 Lv1 你这个写法确实不对,jsxInject 是数组,不是字符串,而且 Vite 的 esbuild 配置是嵌套在 build.esbuild 下的,不是顶层的 esbuild。 正确的写法应该是这样: export default { build: { esbuild: { jsxInject: import React from 'react' } } } 注意三点: 第一,jsxInject 是字符串,不是 JSX 表达式,直接写字符串就行,不用加 <code> 这种东西(你题里那个是 HTML 转义写法,估计是从哪复制过来的); 第二,它必须放在 build.esbuild 下,Vite 2.x 之后顶层没有 esbuild 字段; 第三,如果你用的是 React 17+ 的新 JSX 转换(react-jsx),其实根本不需要 jsxInject,因为自动注入是默认行为。只有你在用旧的 classic 模式(比如手动调用 React.createElement)才需要这个配置。 另外你得确认下你的 tsconfig.json 或 jsconfig.json 里有没有手动指定 jsx 为 preserve 或 react-jsx,要是设成 react-jsx 了,那 jsxInject 根本不会起作用——Vite 会走官方的新转换流程,完全不走 esbuild 的 inject 逻辑。 如果还是报错,建议贴下你的 tsconfig.json 和完整 vite.config.js,我帮你看看是不是配置冲突了。 回复 点赞 3 2026-02-26 16:11 加载更多 相关推荐 2 回答 40 浏览 Vite+esbuild打包后React动态导入报错找不到模块? 大家好,我在用Vite和esbuild打包生产环境时遇到了奇怪的问题。React组件里用动态导入加载子组件,在开发环境没问题,但打包后控制台报错"Cannot find module './SubCo... 西门远香 工具 2026-02-14 10:24:34 2 回答 22 浏览 Vite+esbuild构建后代码没压缩?配置哪里出问题了? 最近在项目里集成esbuild做代码压缩,但生产构建出来的JS文件完全没变化。按文档配置了esbuild插件,还尝试过手动设置minify选项,但控制台一直提示warning UNKNW: Unkno... UX-燕伟 前端 2026-02-15 20:17:27 1 回答 25 浏览 Vite配置插件时,为什么自定义钩子函数没有被触发? 在开发环境用Vite打包时,我按文档给自定义插件加了closeBundle钩子,但控制台就是没输出调试信息。配置文件里已经用export default导出了插件对象,也试过把钩子写成async形式,... 欧阳彦鸽 工具 2026-02-11 10:08:34 2 回答 19 浏览 Babel插件怎么处理JSX中的自定义组件标签? 我写了个Babel插件想把所有自定义组件(首字母大写的JSX标签)替换成函数调用,但插件好像没生效。我试过匹配JSXOpeningElement节点,判断name.name[0]是不是大写,但调试发现... 继芳🍀 工具 2026-02-25 19:46:21 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 回答 26 浏览 Vite+React项目中配置别名后无法导入组件,路径报错怎么办? 在用Vite搭建React项目时,我按文档配置了@别名指向src目录,但导入组件时总提示404错误。比如这样写: // vite.config.js import { defineConfig } f... 迷人的晟华 框架 2026-02-14 19:05:26 2 回答 24 浏览 SWC配置后JSX报错:未定义的useEffect,该怎么解决? 我在Vite项目里用了SWC替代Babel,按照文档配置了@vitejs/plugin-swc,但运行时提示useEffect is not defined。已经确认引入了React,其他配置也没问题... 书生シ奕瑞 前端 2026-02-09 16:48:31 2 回答 52 浏览 自定义Webpack Loader处理React JSX时语法错误怎么办? 我在写一个自定义Webpack Loader来处理React组件的JSX代码,但总是报"Unexpected token (2:8)"错误。尝试用babylon解析时发现,Loader返回的代码字符串... 西门卓尚 前端 2026-02-01 21:37:26 2 回答 46 浏览 Vite的manualChunks配置后组件还是单独打包怎么办? 我在用Vite开发React项目时,想通过manualChunks把四个公共组件打包到同一个chunk里,但配置后每个组件还是单独生成了文件... 项目结构是这样的,四个组件分布在不同页面: // v... 丹丹 优化 2026-01-30 16:11:34
jsxInject是数组,不是字符串,而且 Vite 的 esbuild 配置是嵌套在build.esbuild下的,不是顶层的esbuild。正确的写法应该是这样:
注意三点:
第一,
jsxInject是字符串,不是 JSX 表达式,直接写字符串就行,不用加<code>这种东西(你题里那个是 HTML 转义写法,估计是从哪复制过来的);第二,它必须放在
build.esbuild下,Vite 2.x 之后顶层没有esbuild字段;第三,如果你用的是 React 17+ 的新 JSX 转换(
react-jsx),其实根本不需要jsxInject,因为自动注入是默认行为。只有你在用旧的classic模式(比如手动调用React.createElement)才需要这个配置。另外你得确认下你的
tsconfig.json或jsconfig.json里有没有手动指定jsx为preserve或react-jsx,要是设成react-jsx了,那jsxInject根本不会起作用——Vite 会走官方的新转换流程,完全不走 esbuild 的 inject 逻辑。如果还是报错,建议贴下你的
tsconfig.json和完整vite.config.js,我帮你看看是不是配置冲突了。