Vite 进阶
SSR(服务端渲染)
基本使用
ts
// vite.config.ts
export default defineConfig({
plugins: [vue()],
build: {
ssr: 'src/entry-server.ts', // SSR 入口
},
})// vite.config.ts
export default defineConfig({
plugins: [vue()],
build: {
ssr: 'src/entry-server.ts', // SSR 入口
},
})在 Node 中使用
ts
// server.js
import { createServer } from 'vite'
const vite = await createServer({
server: { middlewareMode: true },
})
// 旧 API(Vite 6 前)
// const module = await vite.ssrLoadModule('/src/entry-server.ts')
// 新 API(Vite 6+ Environment API)
const runner = createServerModuleRunner(vite.environments.ssr)
const module = await runner.import('/src/entry-server.ts')// server.js
import { createServer } from 'vite'
const vite = await createServer({
server: { middlewareMode: true },
})
// 旧 API(Vite 6 前)
// const module = await vite.ssrLoadModule('/src/entry-server.ts')
// 新 API(Vite 6+ Environment API)
const runner = createServerModuleRunner(vite.environments.ssr)
const module = await runner.import('/src/entry-server.ts')常用 SSR 插件
| 插件 | 说明 |
|---|---|
vite-plugin-ssr | 框架无关的 SSR 方案 |
@ssrx/vite | 支持路由级代码分割 + HMR |
@vitejs/plugin-vue SSR | Vue 官方 SSR 支持 |
Vite 8 + Rolldown(2026)
2026 年 3 月发布的 Vite 8 是重大架构更新。
核心变化
Vite 1-7: 源码 → esbuild(dev) + Rollup(prod)
Vite 8: 源码 → Rolldown(Rust, 统一引擎)Vite 1-7: 源码 → esbuild(dev) + Rollup(prod)
Vite 8: 源码 → Rolldown(Rust, 统一引擎)Rolldown 由 VoidZero 用 Rust 编写,彻底取代了双引擎架构。
性能提升
| 场景 | Vite 7(Rollup) | Vite 8(Rolldown) | 提升 |
|---|---|---|---|
| 冷启动构建 | 72.4s | 3.1s | 23× |
| 热启动构建 | 18.6s | 1.4s | 13× |
| 首次启动服务 | 21.3s | 1.9s | 11× |
| HMR(单组件) | 320ms | 62ms | 5× |
| 安装体积 | ~50 MB | ~18 MB | 64%↓ |
迁移要点
- Node 版本:需
>=20.19.0或>=22.12.0 - 配置重命名:
build.rollupOptions→build.rolldownOptionsworker.rollupOptions→worker.rolldownOptions
- SSR 迁移:
ssrLoadModule()→ModuleRunnerAPI - 插件兼容:99%+ Rollup 插件兼容,但
hot.accept(new URL(...))不再支持 - 移除 Babel:
@vitejs/plugin-reactv6 默认使用 Oxc
ts
// Vite 8 配置示例
export default defineConfig({
build: {
rolldownOptions: {
output: {
manualChunks: {
'react-vendor': ['react', 'react-dom'],
},
},
},
// CSS 默认使用 Lightning CSS
cssMinify: 'lightningcss',
// 默认使用 Oxc 压缩
minify: 'oxc',
},
// TS 路径别名原生支持
resolve: {
tsconfigPaths: true,
},
})// Vite 8 配置示例
export default defineConfig({
build: {
rolldownOptions: {
output: {
manualChunks: {
'react-vendor': ['react', 'react-dom'],
},
},
},
// CSS 默认使用 Lightning CSS
cssMinify: 'lightningcss',
// 默认使用 Oxc 压缩
minify: 'oxc',
},
// TS 路径别名原生支持
resolve: {
tsconfigPaths: true,
},
})Vite 7 到 Vite 8 迁移检查清单
- [ ] 更新 Node.js 到 20.19+ 或 22.12+
- [ ] 重命名
build.rollupOptions→build.rolldownOptions - [ ] 更新 SSR 代码(Environment API)
- [ ] 重新生成 lockfile
- [ ] 检查插件兼容性
- [ ] 修复
hot.accept中的 URL 用法 - [ ] 部署到预发环境观察 24 小时
Vite+ Alpha(2026)
Vite+ 是 VoidZero 推出的统一工具链,将 Vite、Vitest、Oxlint、Oxfmt、Rolldown、tsdown 整合为单一 CLI 命令 vp。
bash
vp dev # 启动开发服务器
vp build # 构建
vp test # 运行测试(Vitest)
vp lint # 代码检查(Oxlint)
vp format # 格式化(Oxfmt)vp dev # 启动开发服务器
vp build # 构建
vp test # 运行测试(Vitest)
vp lint # 代码检查(Oxlint)
vp format # 格式化(Oxfmt)类似 Rust 的 cargo 或 Go 的 go tool,提供一站式的开发体验。
生态工具
Vitest
基于 Vite 的测试框架,与 Vite 共享配置和插件:
ts
// vitest.config.ts
import { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
globals: true,
environment: 'jsdom',
},
})// vitest.config.ts
import { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
globals: true,
environment: 'jsdom',
},
})构建工具对比
| 工具 | Vite | Webpack | Turbopack |
|---|---|---|---|
| 语言 | JS+Go(Rust) | JS | Rust |
| 冷启动 | ~1s | ~10s | ~2s |
| HMR | <100ms | ~1s | ~100ms |
| 生产构建 | Rolldown(Rust) | Terser(JS) | 待完善 |
| 配置 | 简洁 | 繁重 | 极简 |
| 生态 | 好(兼容 Rollup) | 最好 | 初期 |
常见问题
1. 静态资源处理
ts
// 显式导入
import imgUrl from './image.png' // 返回 URL
import imgUrl from './image.png?url'
import raw from './file.txt?raw' // 返回字符串
import worker from './worker?worker' // Web Worker// 显式导入
import imgUrl from './image.png' // 返回 URL
import imgUrl from './image.png?url'
import raw from './file.txt?raw' // 返回字符串
import worker from './worker?worker' // Web Worker2. TypeScript 路径别名
json
// tsconfig.json
{
"compilerOptions": {
"paths": {
"@/*": ["./src/*"]
}
}
}// tsconfig.json
{
"compilerOptions": {
"paths": {
"@/*": ["./src/*"]
}
}
}ts
// vite.config.ts — Vite 7 需要额外插件
// vite-tsconfig-paths
// Vite 8 原生支持
resolve: {
tsconfigPaths: true,
}// vite.config.ts — Vite 7 需要额外插件
// vite-tsconfig-paths
// Vite 8 原生支持
resolve: {
tsconfigPaths: true,
}3. 全局变量
ts
// 不使用 define
define: {
__APP_VERSION__: JSON.stringify('1.0.0'),
}// 不使用 define
define: {
__APP_VERSION__: JSON.stringify('1.0.0'),
}4. 环境变量类型提示
ts
// src/env.d.ts
/// <reference types="vite/client" />
interface ImportMetaEnv {
readonly VITE_API_URL: string
readonly VITE_PUBLIC_PATH: string
}
interface ImportMeta {
readonly env: ImportMetaEnv
}// src/env.d.ts
/// <reference types="vite/client" />
interface ImportMetaEnv {
readonly VITE_API_URL: string
readonly VITE_PUBLIC_PATH: string
}
interface ImportMeta {
readonly env: ImportMetaEnv
}
Cao Note