uni-app vue3使用jsx报错

uni-app vue3使用jsx报错

示例代码:

import { defineConfig } from "vite";
import uni from "@dcloudio/vite-plugin-uni";
import vueJsx from '[@vitejs](/user/vitejs)/plugin-vue-jsx'  

export default defineConfig({
plugins: [
uni(),
vueJsx({
// options are passed on to @vue/babel-plugin-jsx
})
],
});

操作步骤:

运行上面的示例项目就会报错

预期结果:

正常运行

实际结果:

报错

bug描述:

uniapp+vue3,页面想使用jsx语法,按照官方文档配置https://uniapp.dcloud.net.cn/tutorial/syntax-jsx.html,但是运行的时候直接报错,如下:

X [ERROR] “vite” resolved to an ESM file. ESM file cannot be loaded by require. See https://vitejs.dev/guide/troubleshooting.html#this-package-is-esm-only for more details. [plugin externalize-deps]

15:06:07.970 node_modules/esbuild/lib/main.js:1374:27: 15:06:07.970 1374 │ let result = await callback({ 15:06:07.970 ╵ ^ 15:06:07.970 at file:///D:/HBuilderX.4.45.2025010502/HBuilderX/plugins/uniapp-cli-vite/node_modules/vite/dist/node/chunks/dep-whKeNLxG.js:68630:35 15:06:07.970 at requestCallbacks.on-resolve (D:\HBuilderX.4.45.2025010502\HBuilderX\plugins\uniapp-cli-vite\node_modules\esbuild\lib\main.js:1374:28) 15:06:07.970 at handleRequest (D:\HBuilderX.4.45.2025010502\HBuilderX\plugins\uniapp-cli-vite\node_modules\esbuild\lib\main.js:732:17) 15:06:07.970 at handleIncomingPacket (D:\HBuilderX.4.45.2025010502\HBuilderX\plugins\uniapp-cli-vite\node_modules\esbuild\lib\main.js:757:7) 15:06:07.970 at Socket.readFromStdout (D:\HBuilderX.4.45.2025010502\HBuilderX\plugins\uniapp-cli-vite\node_modules\esbuild\lib\main.js:680:7) 15:06:07.970 at Socket.emit (node:events:517:28) 15:06:07.970 at addChunk (node:internal/streams/readable:368:12) 15:06:07.970 at readableAddChunk (node:internal/streams/readable:341:9) 15:06:07.970 at Readable.push (node:internal/streams/readable:278:10) 15:06:07.970 at Pipe.onStreamRead (node:internal/stream_base_commons:190:23) 15:06:07.971 This error came from the “onResolve” callback registered here: 15:06:07.971 node_modules/esbuild/lib/main.js:1293:20: 15:06:07.971 1293 │ let promise = setup({ 15:06:07.971 ╵ ^ 15:06:07.971 at setup (file:///D:/HBuilderX.4.45.2025010502/HBuilderX/plugins/uniapp-cli-vite/node_modules/vite/dist/node/chunks/dep-whKeNLxG.js:68594:27) 15:06:07.971 at handlePlugins (D:\HBuilderX.4.45.2025010502\HBuilderX\plugins\uniapp-cli-vite\node_modules\esbuild\lib\main.js:1293:21) 15:06:07.971 at buildOrContextImpl (D:\HBuilderX.4.45.2025010502\HBuilderX\plugins\uniapp-cli-vite\node_modules\esbuild\lib\main.js:979:5) 15:06:07.971 at Object.buildOrContext (D:\HBuilderX.4.45.2025010502\HBuilderX\plugins\uniapp-cli-vite\node_modules\esbuild\lib\main.js:788:5) 15:06:07.971 at D:\HBuilderX.4.45.2025010502\HBuilderX\plugins\uniapp-cli-vite\node_modules\esbuild\lib\main.js:2215:15 15:06:07.971 at new Promise (<anonymous>) 15:06:07.971 at Object.build (D:\HBuilderX.4.45.2025010502\HBuilderX\plugins\uniapp-cli-vite\node_modules\esbuild\lib\main.js:2214:25) 15:06:07.971 at build (D:\HBuilderX.4.45.2025010502\HBuilderX\plugins\uniapp-cli-vite\node_modules\esbuild\lib\main.js:2047:51) 15:06:07.971 at bundleConfigFile (file:///D:/HBuilderX.4.45.2025010502/HBuilderX/plugins/uniapp-cli-vite/node_modules/vite/dist/node/chunks/dep-whKeNLxG.js:68553:26) 15:06:07.971 The plugin “externalize-deps” was triggered by this import 15:06:07.971 …/…/…/…/WORK/phpstudy_pro/WWW/zswt/vite.config.js:1:304: 15:06:07.971 1 │ …y_pro/WWW/zswt/vite.config.js";import { defineConfig } from “vite”; 15:06:07.971 ╵ ~~~~ 15:06:07.972 X [ERROR] “@vitejs/plugin-vue-jsx” resolved to an ESM file. ESM file cannot be loaded by require. See https://vitejs.dev/guide/troubleshooting.html#this-package-is-esm-only for more details. [plugin externalize-deps] 15:06:07.972 node_modules/esbuild/lib/main.js:1374:27: 15:06:07.972 1374 │ let result = await callback({ 15:06:07.972 ╵ ^ 15:06:07.972 at file:///D:/HBuilderX.4.45.2025010502/HBuilderX/plugins/uniapp-cli-vite/node_modules/vite/dist/node/chunks/dep-whKeNLxG.js:68630:35 15:06:07.972 at requestCallbacks.on-resolve (D:\HBuilderX.4.45.2025010502\HBuilderX\plugins\uniapp-cli-vite\node_modules\esbuild\lib\main.js:1374:28) 15:06:07.972 at handleRequest (D:\HBuilderX.4.45.2025010502\HBuilderX\plugins\uniapp-cli-vite\node_modules\esbuild\lib\main.js:732:17) 15:06:07.972 at handleIncomingPacket (D:\HBuilderX.4.45.2025010502\HBuilderX\plugins\uniapp-cli-vite\node_modules\esbuild\lib\main.js:757:7) 15:06:07.972 at Socket.readFromStdout (D:\HBuilderX.4.45.2025010502\HBuilderX\plugins\uniapp-cli-vite\node_modules\esbuild\lib\main.js:680:7) 15:06:07.972 at Socket.emit (node:events:517:28) 15:06:07.972 at addChunk (node:internal/streams/readable:368:12) 15:06:07.972 at readableAddChunk (node:internal/streams/readable:341:9) 15:06:07.972 at Readable.push (node:internal/streams/readable:278:10) 15:06:07.972 at Pipe.onStreamRead (node:internal/stream_base_commons:190:23) 15:06:07.972 This error came from the “onResolve” callback registered here: 15:06:07.972 node_modules/esbuild/lib/main.js:1293:20: 15:06:07.972 1293 │ let promise = setup({ 15:06:07.972 ╵ ^ 15:06:07.972 at setup (file:///D:/HBuilderX.4.45.2025010502/HBuilderX/plugins/uniapp-cli-vite/node_modules/vite/dist/node/chunks/dep-whKeNLxG.js:68594:27) 15:06:07.972 at handlePlugins (D:\HBuilderX.4.45.2025010502\HBuilderX\plugins\uniapp-cli-vite\node_modules\esbuild\lib\main.js:1293:21) 15:06:07.972 at buildOrContextImpl (D:\HBuilderX.4.45.2025010502\HBuilderX\plugins\uniapp-cli-vite\node_modules\esbuild\lib\main.js:979:5) 15:06:07.972 at Object.buildOrContext (D:\HBuilderX.4.45.2025010502\HBuilderX\plugins\uniapp-cli-vite\node_modules\esbuild\lib\main.js:788:5) 15:06:07.972 at D:\HBuilderX.4.45.2025010502\HBuilderX\plugins\uniapp-cli-vite\node_modules\esbuild\lib\main.js:2215:15 15:06:07.972 at new Promise (<anonymous>) 15:06:07.972 at Object.build (D:\HBuilderX.4.45.2025010502\HBuilderX\plugins\uniapp-cli-vite\node_modules\esbuild\lib\main.js:2214:25) 15:06:07.972 at build (D:\HBuilderX.4.45.2025010502\HBuilderX\plugins\uniapp-cli-vite\node_modules\esbuild\lib\main.js:2047:51) 15:06:07.972 at bundleConfigFile (file:///D:/HBuilderX.4.45.2025010502/HBuilderX/plugins/uniapp-cli-vite/node_modules/vite/dist/node/chunks/dep-whKeNLxG.js:68553:26) 15:06:07.972 The plugin “externalize-deps” was triggered by this import 15:06:07.972 …/…/…/…/WORK/phpstudy_pro/WWW/zswt/vite.config.js:3:19: 15:06:07.972 3 │ import vueJsx from ‘@vitejs/plugin-vue-jsx’ 15:06:07.972 ╵ ~~~~ 15:06:07.973 failed to load config from D:\WORK\phpstudy_pro\WWW\zswt\vite.config.js 15:06:07.973 error when starting dev server: 15:06:07.973 Error: Build failed with 2 errors: 15:06:07.973 node_modules/esbuild/lib/main.js:1374:27: ERROR: [plugin: externalize-deps] “@vitejs/plugin-vue-jsx” resolved to an ESM file. ESM file cannot be loaded by require. See https://vitejs.dev/guide/troubleshooting.html#this-package-is-esm-only for more details. 15:06:07.973 node_modules/esbuild/lib/main.js:1374:27: ERROR: [plugin: externalize-deps] “vite” resolved to an ESM file. ESM file cannot be loaded by require. See https://vitejs.dev/guide/troubleshooting.html#this-package-is-esm-only for more details. 15:06:07.973 at failureErrorWithLog (D:\HBuilderX.4.45.2025010502\HBuilderX\plugins\uniapp-cli-vite\node_modules\esbuild\lib\main.js:1651:15) 15:06:07.973 at D:\HBuilderX.4.45.2025010502\HBuilderX\plugins\uniapp-cli-vite\node_modules\esbuild\lib\main.js:1059:25 15:06:07.973 at runOnEndCallbacks (D:\HBuilderX.4.45.2025010502\HBuilderX\plugins\uniapp-cli-vite\node_modules\esbuild\lib\main.js:1486:45) 15:06:07.973 at buildResponseToResult (D:\HBuilderX.4.45.2025010502\HBuilderX\plugins\uniapp-cli-vite\node_modules\esbuild\lib\main.js:1057:7) 15:06:07.973 at D:\HBuilderX.4.45.2025010502\HBuilderX\plugins\uniapp-cli-vite\node_modules\esbuild\lib\main.js:1086:16 15:06:07.973 at responseCallbacks.<computed> (D:\HBuilderX.4.45.2025010502\HBuilderX\plugins\uniapp-cli-vite\node_modules\esbuild\lib\main.js:704:9) 15:06:07.973 at handleIncomingPacket (D:\HBuilderX.4.45.2025010502\HBuilderX\plugins\uniapp-cli-vite\node_modules\esbuild\lib\main.js:764:9) 15:06:07.973 at Socket.readFromStdout (D:\HBuilderX.4.45.2025010502\HBuilderX\plugins\uniapp-cli-vite\node_modules\esbuild\lib\main.js:680:7) 15:06:07.973 at Socket.emit (node:events:517:28) 15:06:07.973 at addChunk (node:internal/streams/readable:368:12) 15:06:07.987 已停止运行…


## bug信息

| 信息           | 描述                                         |
|----------------|----------------------------------------------|
| 产品分类       | uniapp/H5                                    |
| PC开发环境操作系统 | Windows                                      |
| PC开发环境操作系统版本号 | Windows 10 家庭中文版, 版本号 22H2, 安装日期 2021/5/31, OS 内部版本 19045.6216, 序列号 YLX12VYK |
| HBuilderX类型  | 正式                                         |
| HBuilderX版本号 | 4.76                                         |
| 浏览器平台     | Chrome                                       |
| 浏览器版本     | 最新                                         |
| 项目创建方式   | HBuilderX                                    |

更多关于uni-app vue3使用jsx报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

16 回复

我建项目的时候,也出现了这问题. DCloud_UNI_JBB 让我把插件版本降到3.1.0 npm install @vitejs/plugin-vue-jsx@3.1.0 --save-dev 如果是 vue 文件的组件,记得标签加上lang=“jsx”

<script lang="jsx"> export default { render(h) { return

123

} } </script>

下面是DCloud_UNI_JBB提供的 jsx 文件示例:
// HelloWorld.jsx import { defineComponent, ref } from ‘vue’; export default defineComponent({ name: ‘HelloWorld’,
setup() { const count = ref(0);
const increment = () => {
count.value++;
};

return () => (

Hello JSX!

计数: {count.value}

<button onClick={increment}>点击+1</button>
); } });

更多关于uni-app vue3使用jsx报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html


你把 vite.config.js 这个文件删除试试,默认内置了 jsx 的插件

不得行呢,是直接在vue中使用吗?我试了模板报错了

回复 uv_UI: 你咋写的

回复 DCloud_UNI_JBB: <template>

</template> <script setup> import { onMounted } from 'vue'; import { Graph } from '[@antv](/user/antv)/g6'; import { ExtensionCategory, register } from '[@antv](/user/antv)/g6'; import { VueNode } from 'g6-extension-vue'; register(ExtensionCategory.NODE, 'vue-node', VueNode); import { defineComponent, h } from 'vue';
</script>

[vue/compiler-sfc] This experimentalsyntax requires enabling one of the followingparser plugin(s):“jsx”,“flow”,“typescript”.(7:9)

报错这个,意思是没有jsx相关插件

回复 uv_UI: 你是什么版本的vue

回复 DCloud_UNI_JBB: vue3

回复 uv_UI: 发个demo,我试试

解决了吗?

解决了么?

参考一下最佳回复

文档已更新,添加了版本使用注意事项 https://uniapp.dcloud.net.cn/tutorial/syntax-jsx.html#jsx-tsx-支持

这个错误是由于ESM模块兼容性问题导致的。问题出现在HBuilderX内置的uni-app cli环境中,该环境使用CommonJS模块系统,但vite和@vitejs/plugin-vue-jsx包是ESM格式的。

解决方案:

  1. 修改package.json,添加type字段:
{
  "type": "module"
}
  1. 或者修改vite.config.js,使用动态导入:
import { defineConfig } from "vite";
import uni from "[@dcloudio](/user/dcloudio)/vite-plugin-uni";

export default defineConfig(async () => {
  const vueJsx = await import('[@vitejs](/user/vitejs)/plugin-vue-jsx');
  
  return {
    plugins: [
      uni(),
      vueJsx.default()
    ],
  };
});
回到顶部