✅ Vite 6 的重要更新点总览
Vite 6 重点是以下方向:
- 更快、更稳定的 HMR(基于新的
@vitejs/hmr模块) - 更一致的 API(移除一些旧 API)
- 统一构建模式(部分 CLI 变更)
- 新的插件体系增强
- 改进 Rollup、esbuild、Lightning CSS 等依赖版本
🔥 1. 重大破坏性变更(Breaking Changes)
① 配置文件:默认导出必须是对象或函数
之前:
export default defineConfig({...})
Vite 6 要求:
default export必须返回纯对象或函数- 不能再导出数组
- 不能多重 export
② 原开发 HMR API 变更
旧:
import.meta.hot.accept()
新(推荐):
import.meta.hot.on('event', handler)
并新增独立包:
@vitejs/hmr
③ SSR 构建方式更新
Vite 6 规范了 SSR 的 bundle 输出:
- 去掉一些历史兼容字段
- SSR external 逻辑更严格
- 一些插件需要更新(如 React、Vue、Svelte 最新版已兼容)
④ Node 版本要求提升
- Node ≥ 18.0(部分功能要求 ≥ 18.18)
如果你本地 Node 太老会直接报错。
⑤ 默认使用 LightningCSS(取代部分 PostCSS 功能)
- 新增 Lightning CSS(更快)
- 少部分 PostCSS 插件表现可能不同
⑥ 移除旧的 CLI 行为
例如:
| Vite 5 | Vite 6 |
|---|---|
vite optimize | ❌ 删除 |
vite preview --https | 行为变更 |
vite build --watch | 改为 vite build --config-watch |
⚡ 2. 新增功能(New Features)
① 新 HMR 模块系统(更快、更稳定)
官方称 HMR 在大项目中更稳,不会出现 Vite 5 的奇怪卡顿或失效。
② 更快的 CSS 构建
使用 LightningCSS:
- CSS 解析快 10 倍
- 自动处理兼容性
- 更好的 tree-shake
③ 新的 Dev Server 与 Rollup 通信模式
插件可以更快响应文件变化。
④ 更规范的 Bundler 输出
构建输出现在与 Rollup 更一致。
🔧 3. 配置项变化(Changes)
以下是升级时需要检查的配置:
❗ 修改点 1:optimizeDeps 行为调整
Vite 6 内部对预构建优化逻辑变化较大:
- 有的依赖不需要手动列入
include了 - 某些需要主动排除(如虚拟模块)
❗ 修改点 2:resolve.alias 更严格
路径符号必须合法,例如:
❌ 不再容忍结尾的 /
✔ 必须写标准路径
❗ 修改点 3:server.proxy 现在更严格检查对象结构
如果写成:
proxy: {
'/api': 'http://localhost:8080'
}
可能报错,需要改成:
proxy: {
'/api': { target: 'http://localhost:8080', changeOrigin: true }
}
📦 4. 插件兼容性(请升级插件)
多数主流插件已经适配:
- @vitejs/plugin-vue ≥ 5.1
- @vitejs/plugin-react ≥ 4.3
- @vitejs/plugin-legacy ≥ 5.x
- vite-plugin-compression、Imagemin 等也需升级
如果你有使用这些老插件,需要注意兼容性。
🧭 5. 你的项目升级指南(简明版)
按顺序检查:
① 升级 Node 到 ≥ 18.18
② 升级 Vite:
npm i -D vite@latest
③ 所有 Vite 插件跟随升级到最新版本
④ 检查你的 vite.config.ts
- default export 是否正确
- 有没有旧的 optimizeDeps 写法
- proxy 是否是对象格式
- alias 是否是合法路径
⑤ 如果有 HMR 手写逻辑 → 必须迁移
⑥ SSR 项目要检查构建输出
下面给你整理 最完整、最清晰的《Vite 5 → Vite 6 升级差异对比表》 ,按 功能、配置、插件、CLI、SSR、HMR、Node 要求 全面对比,方便你项目升级时逐项核对。
🚀 Vite 5 → Vite 6 升级差异完整对比表
1. 基础环境要求对比
| 项目 | Vite 5 | Vite 6 |
|---|---|---|
| Node 版本 | ≥ 14.18 | ≥ 18.0(推荐 ≥ 18.18) |
| Rollup 版本 | 3.x | 4.x(破坏性变更) |
| LightningCSS | 非默认使用 | 默认启用,加速 CSS 构建 |
2. 核心功能变化
| 功能 | Vite 5 | Vite 6 |
|---|---|---|
| HMR(热更新) | 基于旧内部系统 | 重构为 @vitejs/hmr 模块,性能更稳定、更快 |
| CSS 构建 | 基于 PostCSS | 默认切换到 Lightning CSS(更快) |
| 依赖预构建(optimizeDeps) | esbuild-heavy | 依赖扫描和预构建逻辑优化,更智能 |
| 构建系统 | Rollup 3 | Rollup 4(包含大量 breaking changes) |
3. 配置文件差异
| 配置项 | Vite 5 行为 | Vite 6 行为 |
|---|---|---|
| 配置导出 | 可导出数组、多个 export(某些情况不严) | 必须是默认导出一个对象或函数 |
| server.proxy | 字符串写法可用 | 必须使用对象写法 { target: "" } |
| resolve.alias | 相对宽松 | 更严格,不允许无效路径 |
| optimizeDeps | 需要手动 include 的场景较多 | 自动处理更多依赖,但排除项要更精确 |
| css.postcss | 默认优先 PostCSS | 部分能力被 LightningCSS 覆盖 |
| experimental 选项 | 少 | 增加更多实验配置 |
4. 插件生态变化
| 插件类型 | Vite 5 | Vite 6(注意事项) |
|---|---|---|
| 官方插件(vue/react) | 兼容 | 必须升级到对应 major 版本 |
| vite-plugin-legacy | 工作正常 | 插件必须升级才能支持 Rollup 4 |
| 图片压缩类插件 | 大多基于 Rollup 3 | 不兼容 Rollup 4,需升级 |
| Unocss / Tailwind 插件 | 有兼容性更新 | 建议升级到最新版本 |
| 基于 HMR 的插件 | 使用旧 API | 必须迁移到新版 HMR API |
5. HMR(热更新)差异
| HMR API | Vite 5 | Vite 6 |
|---|---|---|
import.meta.hot.accept() | 标准写法 | 推荐但底层已不同 |
| 自定义事件 | 简单 | 使用全新事件模型: import.meta.hot.on("event", handler) |
| HMR 核心模块 | 内建系统 | 迁移到独立包 @vitejs/hmr |
6. SSR、预渲染差异
| 项目 | Vite 5 | Vite 6 |
|---|---|---|
| SSR 打包结构 | 比较松散 | 标准化 bundle 输出格式 |
| ssr.external | 宽松 | 更严格,自动 external 更智能 |
| preload、prefetch | 行为不完全一致 | 与 Rollup 4 行为对齐 |
7. CLI(命令行)差异
| 命令 | Vite 5 | Vite 6 |
|---|---|---|
vite optimize | ✔ 可用 | ❌ 移除(已废弃) |
vite preview --https | 能覆盖 dev https | 行为更严格 |
vite build --watch | 可用 | 替换为 --config-watch |
| --force | 强制重建缓存 | 行为优化但不变 |
8. 构建行为差异
| 构建项 | Vite 5 | Vite 6 |
|---|---|---|
| chunk 拆分 | 基于 Rollup 3 | 基于 Rollup 4(默认策略有所变化) |
| CSS 抽取 | PostCSS 插件链 | LightningCSS 优先,带来不同输出 |
| Sourcemap | 结构松散 | 更标准化 |
| assetsInlineLimit | 默认 4kb | 保持不变 |
9. 错误提示 & 日志改进
| 项目 | Vite 5 | Vite 6 |
|---|---|---|
| 错误信息 | 较为通用 | 更友好,包含“修复建议” |
| 插件错误定位 | 不精确 | 提供更明确的 plugin hook 报错位置 |
🧱 总结:升级时最容易踩坑的点(Top 8)
| 序号 | 升级风险 | 建议 |
|---|---|---|
| 1 | Node 版本太低 | 升到 ≥ 18 |
| 2 | 插件不兼容 Rollup 4 | 全部升级 |
| 3 | server.proxy 字符串写法导致报错 | 换成 { target: "" } |
| 4 | CSS 因 LightningCSS 输出变化 | 检查 PostCSS 插件 |
| 5 | 原 HMR API 不生效 | 改用新 API |
| 6 | SSR external 行为变化 | 需要手动排除模块 |
| 7 | config 默认导出数组失效 | 改成对象/函数 |
| 8 | optimizeDeps 自动处理变化导致构建失败 | 手动 include/exclude 调整 |