1. Vite 在启动时会做依赖的预构建
  2. 预构建,运行时默认都只会对 jsx tsx 做语法转换。不会对 .js 文件做 jsx 语法转换

解决方法一:(不推荐)

  • .vue后缀 文件更改为 .jsx .tsx 文件 就可以执行

解决方法二: (推荐!)

  • .vue 文件的script标签加上 lang='jsx' 或 lang='tsx' 就可以解析vue文件

首先要确保你已经安装了 解析jsx的plugin : @vitejs/plugin-vue-jsx

vite.config.js
配置文件 配置plugin

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from "@vitejs/plugin-vue-jsx"
export default defineConfig({
  plugins: [
    vue(),
    vueJsx({
 		// 这里可以配置其他的选项   

App.jsx

// 1. Vite在启动时会做依赖的预构建
// 2. 预构建,运行时默认都只会对jsx与tsx做语法转换。不会对js做jsx的语法转换。
export default {
    data() {
        return {
            counter: 0
    render() {
        const increment = () => this.counter++
        const decrement = () => this.counter--
        return (
                <h2>当前计数: {this.counter}</h2>
                <button onClick={increment}>+1</button>
                <button onClick={decrement}>-1</button>
            </div>

App.vue
在script标签加上 lang='jsx'属性

<script lang='jsx'>
 lang='jsx'属性
export default {
    data() {
        return {
            counter: 0
    render() {
        const increment = () => this.counter++
        const decrement = () => this.counter--
        return (
                <h2>script标签要加上lang='jsx'才能解析</h2>
                <h2>当前计数: {this.counter}</h2>
                <button onClick={increment}>+1</button>
                <button onClick={decrement}>-1</button>
            </div>
</script>
                                    最近在为部署人员开发辅助部署的工具,技术栈是vue3+vite+electron,在使用jsx语法,提示我需要引入插件,所以就找到了vue3+vite项目引入jsx的方式。如果您的项目用vue-cli创建并自动支持jsx语法,那么此篇文章对您无益。不知道为什么,即使在include维护了.vue,也不能在.vue文件使用jsx,不过如果采用vue3组合式语法的规范开发,正常情况下也不需要在vue文件使用jsxJSXJavaScript 和 XML)是一种语法扩展,它结合了 HTML 和 JavaScript 的功能。最初,它是在 React 引入的,用于描述 UI 应该呈现出其交互本质的形式。由于 JSX 是在 JavaScript 语法上的扩展,因此类似于 HTML 的代码可以与 JavaScript 代码混合使用。Click Me该 button 常量称为 JSX 表达式。可以使用它在我们的应用程序渲染标签。浏览器是无法读取直接解析 JSX 的。MyButton,
                                    JSXJavaScript 和 XML),是一个 HTML-in-JavaScript 的语法扩展,首先在 React 被进入。JSX 可以很好地描述 UI 应该呈现出它应有交互的本质形式。JSX 是在 JavaScript 语法上的拓展,因此类似于 HTML 的代码可以和 JS 共存。Click Me该 button 常量称为 JSX 表达式。可以使用它在我们的应用程序渲染标签。浏览器是无法读取直接解析 JSX 的。MyButton,)
在 vite.config.ts 文件挂载
import vueJsx from '@vitejs/plugin-vue-jsx'
export default defineConfig({
 plugins: [ vueJsx()]
tsconfig.json 文件
  // include 需要包含tsx
"include": 
import vueJsx from '@vitejs/plugin-vue-jsx';
export default defineConfig({
  plugins: [vueJsx(), ...],
新建xxx.tsx或者xxx.jsx,注意不
                                    所有内容首发微信公众号【WEB前端李志杰】,未经允许禁止转载!
可能大家要问我为什么要使用jsx语法开发Vue?
首先要说明的是:个人认为jsx语法和模板语法并不存在优劣之分,在实际项目应该优先选择开发人员所擅长的语法进行开发。
那么、接下来再说说在Vue开发为什么要使用jsx语法?
第一点、jsx语法可以更好地跟Typescript结合;
第二点、在阅读UI框架源码,发现在知名UI组件库Ant Design Vue跟Naive UI皆使用tsx语法开发。
接下来大家可能又要问了tsx语法跟jsx又有
                                    vite-plugin-react-jsx
 这是的插件,与React一起使用可增强jsx的转换。
 在开发模式下,它将在开发模式下添加调试信息,以便React Devtools(和其他工具)可以显示元素来自的文件名和行号,这在调试非常有用。
 这确实意味着您除了使用vite编译管道外还使用 ,这可能会使事情变慢(TODO:测量速度的差异。)
 当然,可以随删除它,而不会以任何方式破坏您的应用程序。
 这个特定的转换非常简,因此这里有机会将其实现为独立的东西,可能使用Go或Rust等其他语言(甚至说服esbuild在内部实现)。
 (可选)(通过runtime: 'automatic' ),您可以启用; 这可能会受益于较小的包装束和即将进行的优化,但是也将在生产过程使用。 (待办事项:测量可能会变慢多少。) 我正在考虑删除此选项,它可能会绊倒那些可能很少获得胜利的人。
                                    首先,我们在项目通常使用template模板来创建应用,template模板会在构建阶段被编译成render渲染函数。渲染函数就是用来返回虚拟DOM的函数。那么我们其实可以跳过这个步骤,直接使用h函数来生成虚拟DOM。h函数的内部执行的其实是createVNode函数来生成虚拟DOM的,但是由于h函数比较难写,所以我们使用JSX来更加方便快捷的书写。JSX的内部其实也是使用的createVNode函数。JSXJavaScript是不能直接执行的,在vite项目,我们需要安装插件。
                                    类型“typeof import("D:/\u9879\u76EE/00/model-dev-platform-doc/node_modules/@element-plus/icons-vue/dist/types/index")”的参数不能赋给类型“Plugin_2”的参数。至此,我们新建的这个vite项目已经全面支持jsx语法了,此还需要在。报错一:无法使用 JSX,除非提供了 "--jsx" 标志。