Vite 里怎么自定义 esbuild 的 JSX 配置? 技术士俊 提问于 2026-02-26 15:47:17 阅读 57 前端 我在用 Vite 搭建 React 项目,想让 esbuild 支持自动导入 React,但改了 build.jsxInject 好像没生效? 试过在 vite.config.js 里加这个配置: export default { esbuild: { jsxInject: <code>import React from 'react'</code> } } 但还是报 “React is not defined” 的错,是不是写法不对? 我来解答 赞 9 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 2 条解答 婷婷 Dev Lv1 哦这个坑我也踩过,vite的esbuild配置要这么写才对: export default { esbuild: { jsxInject: 'import React from 'react';' } } 关键点是: 1. jsxInject 的值必须是字符串 2. 字符串里的单引号要转义 3. 最后要有分号 这样配置后每个JSX文件头部都会自动注入这行代码。不过说实话这配置挺鸡肋的,还不如直接用@vitejs/plugin-react插件来得省事。 回复 点赞 1 2026-03-07 08:03 瑞云 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,我帮你看看是不是配置冲突了。 回复 点赞 7 2026-02-26 16:11 加载更多 相关推荐 2 回答 31 浏览 Vite 里怎么自定义 esbuild 的 JSX 配置? 我用 Vite 搭了个 React 项目,想改 esbuild 的 jsxFactory 配置,但不知道在哪配。试过在 vite.config.js 里加 build.esbuild,但好像没生效? ... a'ゞ付敏 前端 2026-03-09 21:49:20 1 回答 38 浏览 Vite 里怎么配置 esbuild 的 JSX 自动转换? 我在 Vite 项目里用了 JSX 语法,但没装 Babel,听说 esbuild 能自动处理 JSX。可现在报错说“React is not defined”,是不是哪里没配对? 我试过在 vite... 轩辕华丽 前端 2026-03-07 18:44:20 1 回答 25 浏览 Vite 里怎么自定义 esbuild 的配置? 我最近在用 Vite 搭项目,发现它默认用 esbuild 做依赖预构建和 TS 转译,但我想改一下 esbuild 的 target 或加个 loader,试了直接在 vite.config.js ... Mr.俊娜 前端 2026-03-14 17:05:15 2 回答 76 浏览 Vite+esbuild打包后React动态导入报错找不到模块? 大家好,我在用Vite和esbuild打包生产环境时遇到了奇怪的问题。React组件里用动态导入加载子组件,在开发环境没问题,但打包后控制台报错"Cannot find module './SubCo... 西门远香 工具 2026-02-14 10:24:34 2 回答 37 浏览 Vite+esbuild构建后代码没压缩?配置哪里出问题了? 最近在项目里集成esbuild做代码压缩,但生产构建出来的JS文件完全没变化。按文档配置了esbuild插件,还尝试过手动设置minify选项,但控制台一直提示warning UNKNW: Unkno... UX-燕伟 前端 2026-02-15 20:17:27 2 回答 54 浏览 Vite配置插件时,为什么自定义钩子函数没有被触发? 在开发环境用Vite打包时,我按文档给自定义插件加了closeBundle钩子,但控制台就是没输出调试信息。配置文件里已经用export default导出了插件对象,也试过把钩子写成async形式,... 欧阳彦鸽 工具 2026-02-11 10:08:34 2 回答 48 浏览 Vite 的 manualChunks 配置怎么让第三方库单独打包? 我在用 Vite 做项目,想把像 lodash、axios 这些第三方库单独打成 vendor 包,但配置了 manualChunks 后发现它们还是被打进 main.js 里了,根本没拆出来。我试过... 打工人路阳 优化 2026-03-07 16:04:23 2 回答 41 浏览 Babel插件怎么处理JSX中的自定义组件标签? 我写了个Babel插件想把所有自定义组件(首字母大写的JSX标签)替换成函数调用,但插件好像没生效。我试过匹配JSXOpeningElement节点,判断name.name[0]是不是大写,但调试发现... 继芳🍀 工具 2026-02-25 19:46:21 2 回答 71 浏览 迁移Vite到4.x后react插件配置报错怎么办? 今天升级Vite到4.x后,react插件配置突然报错了。之前用vite-plugin-react时这样写的: import react from '@vitejs/plugin-react' exp... 哲玮(打工版) 工具 2026-02-17 10:23:28 2 回答 45 浏览 Vite配置Library模式打包后导出的文件无法被其他项目引入怎么办? 我在用Vite的Library模式打包一个工具库时遇到问题,按照文档配置了library选项,但打包生成的umd文件在另一个项目里引入时一直报错:Uncaught TypeError: Cannot ... Air-卫红 前端 2026-02-15 10:24:34
关键点是:
1.
jsxInject的值必须是字符串2. 字符串里的单引号要转义
3. 最后要有分号
这样配置后每个JSX文件头部都会自动注入这行代码。不过说实话这配置挺鸡肋的,还不如直接用@vitejs/plugin-react插件来得省事。
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,我帮你看看是不是配置冲突了。