Vite 框架集成:React、Vue、Svelte、Solid 与官方插件生态

系统覆盖 Vite 与主流前端框架的集成:@vitejs/plugin-vue、plugin-react、Svelte/Solid 插件、框架预设(create-vite 模板)、JSX 转换、框架 HMR、选择框架插件的要点。

引言

Vite 能成为各框架的「默认构建器」,靠的是框架插件把 Vite 的通用能力转译成框架语法——.vue 单文件、JSX/TSX、.svelte 组件、Solid 的响应式编译。本文系统讲框架集成:先说明框架插件做什么(语法转译 + HMR 注入 + 配置预设),再逐个拆解 React / Vue / Svelte / Solid 的集成要点与常见坑,最后给出「选框架插件 + 从零集成」的决策清单,让你能快速为任何框架搭好 Vite 工程。

前置:/vite-scaffold-engineering/(create-vite 起步)、/vite-plugin-development/(插件机制)。框架知识见 [[frontend]]。


目录


1. 框架插件在 Vite 中扮演什么角色

框架插件 = 语法转译 + HMR 注入 + 开发预设:

React:JSX/TSX → 浏览器可执行 + react-refresh(保留 Hook 状态)
Vue:  .vue SFC(template/script/style)→ 编译为 JS + 组件级 HMR
Svelte:.svelte → 编译期响应式 JS(运行时零依赖)
Solid: JSX → 编译期细粒度响应式

插件做的三件事:

职责说明
语法转译transform 钩子把框架语法转成 JS
HMR 注入注入 import.meta.hot 边界(见 /vite-hmr-internals/)
配置预设预设 alias(@ → src)、loader、JSX 开关

心智:Vite 核心不认识任何框架——所有框架能力都是通过「插件」注入的,所以选对插件 = 框架体验的全部。


2. create-vite 框架预设:一分钟起项目

create-vite 自带框架模板:

# React
npm create vite@latest my-app -- --template react
npm create vite@latest my-app -- --template react-ts
# Vue
npm create vite@latest my-app -- --template vue
npm create vite@latest my-app -- --template vue-ts
# Svelte / Solid / Preact / Lit / vanilla
npm create vite@latest my-app -- --template svelte
npm create vite@latest my-app -- --template solid

常用模板速查:

模板说明
vanilla无框架纯 JS
react / react-tsReact + JSX
vue / vue-tsVue SFC
svelte / svelte-tsSvelte
solid / solid-tsSolid
preactPreact(React 兼容)

记忆:--template xxx 是官方最权威的起点——生产级配置已就绪,别自己手搓基础工程。


3. React 集成:@vitejs/plugin-react 与 Fast Refresh

配置:

// vite.config.ts
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

export default defineConfig({
  plugins: [react()],
})

plugin-react 做了什么:

能力说明
JSX/TSX 转译esbuild 快速转换
Fast Refreshreact-refresh 保留 Hook 状态
自动 JSX runtime无需手动 import React
Babel 管线可选(如装饰器/插件)
HMR 边界组件级热更新

React 集成注意点:

// ✅ 默认 JSX runtime(vite 自动处理)
export function App() { return <h1>Hi</h1> }

// Fast Refresh 限制
export const Comp = () => ...      // 导出组件必须大写开头
export default App                  // 只导出组件(非组件导出会降级全量刷新)

TSX + tsconfig:

{
  "compilerOptions": {
    "jsx": "react-jsx",
    "types": ["vite/client"]
  }
}

记忆:React 集成的灵魂是 Fast Refresh——它能在不丢 Hook 状态的情况下重渲染组件,比全量刷新快一个量级。


4. Vue 集成:@vitejs/plugin-vue 与 SFC 支持

配置:

// vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

export default defineConfig({
  plugins: [vue()],
})

SFC 编译管线:

<template>…</template>   → 编译为渲染函数
<script setup>…</script> → 编译为组件逻辑(setup 语法糖)
<style scoped>…</style>  → scoped 样式 + CSS 热更

plugin-vue 能力:

能力说明
SFC 编译template/script/style 三块
scoped 样式编译期加 data-v-xxx
组件 HMR模板级/组件级热更新
<script setup>语法糖支持
CSS 预处理器scss/less 配合使用

额外可选插件:@vitejs/plugin-vue-jsx(在 Vue 里用 JSX)。

Vue 集成注意点:

// vue 插件已预设 @ → src
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

export default defineConfig({
  plugins: [vue()],
  // 需要 scss?
  css: { preprocessorOptions: { scss: { additionalData: '@use "@/styles/vars" as *;' } } },
})

记忆:Vue 的 SFC 一站式(模板+脚本+样式)是最大优势——plugin-vue 全包,scoped 样式自动隔离。


5. Svelte 与 Solid:响应式编译与细粒度更新

Svelte 集成:

npm i -D @sveltejs/vite-plugin-svelte
// vite.config.ts
import { defineConfig } from 'vite'
import { svelte } from '@sveltejs/vite-plugin-svelte'

export default defineConfig({
  plugins: [svelte()],
})

Svelte 特点:编译期响应式——let count = 0 + $: 依赖自动跟踪,运行时几乎无框架开销:

<script>
  let count = 0
  $: doubled = count * 2        // 响应式声明
  function inc() { count++ }
</script>

<button on:click={inc}>count = {count}(翻倍 {doubled})</button>

Solid 集成:

npm i -D vite-plugin-solid
// vite.config.ts
import { defineConfig } from 'vite'
import solid from 'vite-plugin-solid'

export default defineConfig({
  plugins: [solid()],
})

Solid 特点:JSX + 细粒度响应式——createSignal,更新只重渲染变化的 DOM 节点:

import { createSignal } from 'solid-js'

function Counter() {
  const [count, setCount] = createSignal(0)
  return <button onClick={() => setCount(c => c + 1)}>{count()}</button>
}
框架更新粒度运行时开销心智
Svelte编译期细分极低$: 声明式
SolidDOM 节点级极低Signal + JSX
React组件重渲染中不可变 + Hooks
Vue组件/模板低响应式 proxy

记忆:Svelte/Solid 走「编译期响应式」——体积小、更新细,但生态相对小;React/Vue 生态更大、心智更主流。


6. 手动集成:从零接入一个框架

不依赖 create-vite,手写集成流程(以 React 为例):

# 1. 初始化
npm init -y
npm i -D vite @vitejs/plugin-react
npm i react react-dom
// 2. vite.config.ts
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

export default defineConfig({
  plugins: [react()],
})
<!-- 3. index.html(Vite 入口) -->
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
// 4. src/main.tsx
import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App'

ReactDOM.createRoot(document.getElementById('root')!).render(
  <React.StrictMode><App /></React.StrictMode>,
)
// 5. package.json scripts
{
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "preview": "vite preview"
  }
}

心智:手动集成 = index.html 入口 + 框架插件 + src 目录——理解了这三步,任何框架都能接上。


7. 多框架共存与混合工程

大型项目可能同时用多个框架(如 React 主应用 + Vue 微件):

// vite.config.ts 多框架插件共存
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import vue from '@vitejs/plugin-vue'

export default defineConfig({
  plugins: [react(), vue()],
})

混合注意事项:

要点说明
插件顺序一般无冲突,按需排列
目录隔离src/react/ 与 src/vue/ 分目录
共享依赖react/vue 各自唯一,别混
HMR 边界各自框架各自 accept

微前端场景:用 Vite 的模块联邦能力把多框架应用组合(参考 /vite-monorepo-architecture/)。

记忆:多框架共存是插件叠加问题——各自编译各自语法,目录隔离 + 依赖唯一即可。


8. 框架插件 vs 通用插件:如何选择

框架插件(官方/社区):

插件用途
@vitejs/plugin-reactReact JSX + Fast Refresh
@vitejs/plugin-vueVue SFC
@vitejs/plugin-vue-jsxVue 中的 JSX
@sveltejs/vite-plugin-svelteSvelte
vite-plugin-solidSolid

通用插件(跨框架):

插件用途
@vitejs/plugin-legacy老浏览器兼容
vite-plugin-pwaPWA
vite-plugin-svgrSVG 转组件
vite-plugin-compressiongzip/brotli
vite-plugin-mdMarkdown 渲染

选择原则:

框架语法(JSX/SFC/svelte)→ 必须框架插件
工程能力(压缩/PWA/旧浏览器)→ 通用插件即可
同名插件冲突 → 只装一个框架插件

记忆:「框架专属语法」用框架插件,「通用工程能力」用通用插件——别用通用插件假装支持某框架语法。


9. 框架集成常见坑

坑原因解法
JSX 未定义缺插件/JSX runtime装 @vitejs/plugin-react
.vue 无法加载没装 plugin-vue装插件
Svelte 报编译错缺 svelte 插件装 vite-plugin-svelte
Fast Refresh 失效组件文件导出非组件只导出组件
别名失效框架插件未预设 alias手动配 resolve.alias
两个 React依赖重复resolve.dedupe: [‘react’]
HMR 全量刷新插件未注入 accept检查框架插件是否在 plugins 里

调试建议:改一个组件看终端「hmr update」粒度——如果全量 reload,基本是插件没注入 HMR。

记忆:框架集成的坑 80% 是「插件缺失或依赖重复」——先查 plugins 装齐了没,再查 dedupe。


10. 速查表

需求插件
React@vitejs/plugin-react
Vue@vitejs/plugin-vue
Vue + JSX@vitejs/plugin-vue-jsx
Svelte@sveltejs/vite-plugin-svelte
Solidvite-plugin-solid
老浏览器@vitejs/plugin-legacy
PWAvite-plugin-pwa
压缩vite-plugin-compression
起项目npm create vite -- --template react-ts

一句话记忆:框架插件是 Vite 认识框架的桥——React/Vue/Svelte/Solid 各有官方插件,负责语法转译 + HMR + 预设;起项目用 create-vite 模板、手动集成就是「入口 + 插件 + src」;多框架共存靠插件叠加与目录隔离;报错先查插件缺没缺、依赖重复没重复。


延伸阅读

  • /vite-scaffold-engineering/ — 脚手架与工程规范
  • /vite-hmr-internals/ — 框架 HMR 边界机制
  • /vite-plugin-development/ — 插件开发原理
  • [[frontend]] — 前端框架全景
  • [[typescript]] — TSX 与类型配置

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「vite」更多文章

  1. Vite 静态资源与媒体资产处理:图片、字体、SVG 与 Worker
  2. Vite 环境变量与生产构建最佳实践:import.meta.env、构建模式与产物优化
  3. Vite 浏览器兼容与 Legacy 构建:build.target、Polyfill 与兼容插件