Vite 5.0 发布解析:Rollup 4、API 清理与 server.warmup 启动提速指南
本篇技术指南基于 Vite 团队于 2023 年 11 月 16 日发布的官方公告(见 docs/blog/announcing-vite5.md),系统梳理 Vite 5.0 的核心变更:切换到 Rollup 4、API 清理(移除弃用特性)、define 的 AST 替换重构、Node.js 18+ 的运行要求,以及新引入的 server.warmup 启动预热能力。读完本文,你可以理解 Vite 5 各主要改动的动机与影响面,并结合仓库源码定位 server.warmup 的实现位置,为你的项目升级 Vite 5 做好评估与准备。
背景:Vite 4 奠定的生态基础与长期规划
公告首先回顾了 Vite 4 发布近一年来的生态进展,这些背景信息决定了 Vite 5 的定位——它不是一次大改,而是一次“清理与固化”:
- 生态持续扩张:npm 周下载量从 250 万增长到 750 万;Astro、Nuxt、SvelteKit、Solid Start、Qwik City 等框架持续基于 Vite 构建,RedwoodJS 与 Remix 切换到 Vite,进一步推动了 React 生态的采用;Vitest 的增长速度快于 Vite 本身,Vite 与 Storybook、Nx、Playwright 等工具的集成不断完善,Vite dev 也支持了在 Deno 与 Bun 环境中运行。
- ViteConf 2023 与 Rolldown 长期规划:在 ViteConf 上,Evan You 公布了 Vite 的长期计划——基于 Rolldown(Rollup 的 Rust 移植版本,API 兼容)重构核心。规划目标是:一旦就绪,Vite Core 将用 Rolldown 同时承接 Rollup 和 esbuild 的任务,带来构建性能提升,并大幅减少 dev 与 build 之间的行为不一致。公告发布时 Rolldown 尚处于早期阶段,团队计划在年底前开源代码库。
值得对照的是:从当前仓库源码看,这一长期规划后来已落地。packages/vite/package.json 显示当前 Vite 的构建依赖中已包含
rolldown,且 Vite 自身的构建工具链(rolldown --config rolldown.config.ts)也已采用 Rolldown,印证了公告中“性能敏感部分迁移到 Rust 实现”的方向。
快速上手 Vite 5
公告给出的上手方式:
- 使用
pnpm create vite脚手架创建项目,可选择你偏好的框架模板; - 使用
pnpm create vite-extra获取其他框架与运行时模板(Solid、Deno、SSR、library starters);在create vite中,Others选项下同样可以找到vite-extra模板。
公告同时提醒:Vite 官方 starter 模板的定位是“用于测试 Vite 与各框架兼容性的 playground”,实际生产项目建议使用各框架官方推荐的 starter(例如 Vue 的 create-vue 和 Nuxt 3、Svelte 的 SvelteKit,部分框架的创建命令在 create vite 中会直接重定向到各自 starter)。
在当前仓库中,脚手架工具对应 packages/create-vite 目录,内置了 vanilla、react、vue、svelte、preact、lit、qwik、solid 等框架的 JS 与 TypeScript 双模板(如 template-react-ts、template-vue),其源码入口见 packages/create-vite/src。
Node.js 支持:18 / 20+ 为硬性要求
Vite 5 放弃了对 Node.js 14 / 16 / 17 / 19 的支持(均已到达 EOL),Node.js 18 / 20+ 成为运行要求。这是对 Vite 长期“面向未来(future-proof)”策略的又一次推进:随着底层工具链(如 esbuild、Rollup 4)对新版本 Node.js 原生特性的依赖加深,维护过旧的运行时支持的代价越来越大。
如果你的项目仍运行在 Node.js 16 或更低版本,升级 Vite 5 前需要先升级 Node.js。
性能提升:性能指南与 server.warmup
Vite 5 在 Rollup 4 带来的构建性能提升之外,还带来了面向开发服务器的性能改进,核心有两点:
新增性能排查指南
仓库中新增了专门的性能指南 docs/guide/performance.md,帮助开发者识别和修复常见的性能问题(如依赖优化、模块图过大、转换瀑布等)。
server.warmup:预热常用文件,改善启动体验
server.warmup 是 Vite 5 引入的新特性,用于改善服务器启动后的首次加载体验。结合官方配置文档 docs/config/server-options.md 与性能指南 docs/guide/performance.md,其完整行为如下:
- 类型:
{ clientFiles?: string[], ssrFiles?: string[] } - 作用:让你声明一组在服务器启动后应立即预转换(pre-transform)并缓存结果的文件,从而改善首次页面加载、避免转换瀑布(transform waterfalls);
clientFiles仅用于客户端的文件,ssrFiles仅用于 SSR 的文件;两者均接受相对于root的文件路径数组或tinyglobby的 glob 模式;- 官方建议只预热真正高频使用的文件,以免在启动时压垮 dev server。
配置示例(来自官方文档):
export default defineConfig({
server: {
warmup: {
clientFiles: ['./src/components/*.vue', './src/utils/big-utils.js'],
ssrFiles: ['./src/server/modules/*.js'],
},
},
})
另一个自动行为:当使用 --open 或 server.open 启动时,Vite 会自动预热应用入口点(或指定要打开的 URL),从而进一步缩短首次打开的等待时间。
源码印证:当前仓库中该特性的实现集中在 packages/vite/src/node/server/warmup.ts,并通过 packages/vite/src/node/server/index.ts 中的
warmupRequest对外暴露(环境实例层面同样提供environment.warmupRequest),说明预热请求是建立在环境级 transform 管道之上的。
Vite 5 主要变更清单
公告列出的 Vite 5 主要变更如下,每一项都对应 docs/guide/migration.md 迁移指南中的专项章节(以下为仓库中该指南的当前路径,章节内容会随版本演进,升级时请以你目标版本对应的文档为准):
| 变更 | 说明要点 |
|---|---|
| Vite 改用 Rollup 4 驱动 | 构建性能获得显著提升 |
| 弃用 CJS Node API | Node API 走向纯 ESM,CJS 接口被标记弃用 |
重构 define 与 import.meta.env.* 替换策略 |
define 从正则替换改为基于 AST 的替换,修复了此前正则替换带来的一系列历史问题 |
| SSR 外部化模块的值与生产一致 | 消除 dev 与 build 之间的行为差异 |
worker.plugins 改为函数形式 |
插件数组改为函数接收,增强灵活性 |
允许包含 . 的路径回退到 index.html |
SPA 路由回退行为放宽 |
| 对齐 dev 与 preview 的 HTML 服务行为 | 减少两种模式下的行为不一致 |
manifest 文件默认生成到 .vite 目录 |
默认输出位置调整 |
CLI 快捷操作需要额外按一次 Enter |
避免误触 |
更新 experimentalDecorators 与 useDefineForClassFields 的 TypeScript 行为 |
TS 编译行为对齐 |
移除 --https 标志与 https: true |
弃用 HTTPS 快捷选项 |
移除 resolvePackageEntry 与 resolvePackageData API |
清理已弃用的解析 API |
| 移除此前已弃用的 API | 见迁移指南“Removed deprecated APIs”章节 |
公告特别指出,Vite 5 的整体思路是清理 API(移除弃用特性)并简化多项功能、关闭长期存在的 issue,例如 define 切换到正规的 AST 替换。
如何迁移到 Vite 5
公告给出的迁移建议:
- 升级前先阅读迁移指南:docs/guide/migration.md 提供了详细的逐版本迁移说明。公告发布时对应的是 Vite 4 → Vite 5 的指南;仓库当前版本已演进至 8.x,该文档为最新的迁移指南,历史版本的说明请查阅对应版本文档站。
- 完整变更列表见 Changelog:Vite 核心的完整变更清单记录在 packages/vite/CHANGELOG.md 中,5.0.0 条目(2023-11-16)即为该发布的低级别拆解。
- 生态协作保障:Vite 团队与生态伙伴合作,借助
vite-ecosystem-ci在做出更大胆变更的同时避免回归——这也是 Vite 敢于在 5.0 中移除弃用 API 的底气所在。
致谢与后续发展
Vite 5 是 850 多位核心贡献者、下游维护者、插件作者与 Vite 团队共同努力的结果,本次重大发布的发布流程由 Bjorn Lu 主导;StackBlitz、Nuxt Labs 与 Astro 持续通过雇用 Vite 团队成员的方式投入 Vite 开发。
从这份公告出发,可以串起 Vite 此后几年的演进主线:Vite 5 完成 API 清理并埋下 Rolldown 的种子 → Rolldown 开源并进入技术预览 → 当前仓库中的 Vite 8 已基于 Rolldown 与 Oxc 构建(见 packages/vite/package.json 的依赖与 docs/guide/migration.md 中关于 Rolldown 集成、Oxc 转换与压缩的说明)。如果你正站在 Vite 5 这一里程碑上升级项目,理解公告中“清理 + 面向未来”的主线,就能更从容地应对后续每个大版本的迁移。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0622
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00