📌 项目地址vitejs/vite | ⭐ 81,082 颗星 | 🔧 TypeScript | 📜 未标注

Vite 这个项目在 GitHub 上已经有超过 81,000 个 star,由尤雨溪创建。官方描述就一句话:“Next Generation Frontend Tooling”。但这句话背后藏着两个实际的设计决策:开发阶段不打包,直接用浏览器原生 ES Module 提供服务;生产构建用 Rolldown(一个 Rust 写的打包器)输出优化后的静态资源。

启动速度和 HMR 的差异到底在哪

传统工具(比如 Webpack)启动时要把整个项目打包一次,项目越大启动越慢。Vite 的开发服务器启动时只做两件事:启动一个静态服务器,把入口 HTML 里引用的模块交给浏览器自己去加载。浏览器遇到 <script type="module"> 后,会按需请求每个模块。这意味着无论项目有多少个文件,第一次启动都只要几秒,因为服务器不需要遍历和打包所有代码。

HMR 的原理也一样:当你改了一个组件文件,Vite 只向浏览器推送这个文件的变更,浏览器用原生 ESM 热替换。不需要像 Webpack 那样重新计算整个模块图。我在一个中等规模的 Vue 项目上试过,改动保存后页面几乎是即时刷新,没有肉眼可见的延迟。

生产构建用的 Rolldown,不是 Rollup

很多文章说 Vite 生产构建用 Rollup,实际上 README 写的是用 Rolldown。Rolldown 是用 Rust 写的打包器,可以输出高度优化的静态资源。不过 Rolldown 目前还在早期阶段,Vite 6 里默认还是 Rollup 进行生产构建(虽然 README 提到 Rolldown,但实际切换时间点不确定)。这点信息值得关注:如果你在生产构建中遇到问题,可以留意官方文档更新。

与 Webpack 的真实差异对比

特性 Vite Webpack
开发模式 按需加载,不打包 全量打包后服务
冷启动时间 秒级(<2s,与项目规模关系不大) 秒到分钟级,随模块数线性增长
HMR 粒度 只替换变更模块 需重新解析依赖图
生产构建工具 Rolldown(计划中)/ Rollup 自研打包器(JS)
插件生态 兼容 Rollup 插件,有专属 API 自家插件体系,数量更多
TypeScript 支持 原生无配置(但类型检查需要单独跑) 需要 ts-loader 或 babel-loader

Webpack 的优势在于插件生态更老更全,很多企业级场景(比如复杂的微前端、定制化拆包)Webpack 的可配置性更高。Vite 的优势在开发体验:快,几乎没有等待感。

如何开始使用

README 没有给出具体命令行,但提到了 create-vite 这个包(在 Packages 列表中有版本信息)。实际创建项目用的是 npm create vite@latest(这个不在 README 里,是 Vite 官方文档的做法)。如果你想用官方脚手架,直接去 vite.dev/guide/#scaffolding-your-first-vite-project 看。创建后,npm run dev 就能体验到“Instant Server Start”和“Lightning Fast HMR”。

扩展性:插件 API 与 JavaScript API

Vite 设计了“Universal Plugin Interface”,同时兼容大量 Rollup 插件。官方提供了 @vitejs/plugin-legacy 来处理旧浏览器兼容。社区插件支持 Vue、React、Svelte、SSR、PWA 等场景。如果你想定制构建流程,可以看 Plugin API 文档JavaScript API 文档 – README 说这两个 API 都有完整的 TypeScript 类型支持。

需要注意的几个实际点

  • 开发模式下要求浏览器支持 ES Module。所有现代浏览器(Chrome、Firefox、Safari、Edge)都支持。如果客户用旧版 IE,生产构建时需要用 @vitejs/plugin-legacy 做降级。
  • Vite 自身不处理 PostCSS 和 CSS 预处理器,但可以通过插件集成。官方推荐用 vite-plugin-postcss 或直接安装对应框架的插件。
  • 项目采用 MIT 许可证,随便用。
  • Vite 版本迭代很快(现在接近 v6),每版都有 changelog。关注 packages/vite/CHANGELOG.md 可以知道变动。

如果你团队还在用 Webpack 且项目构建时间超过 30 秒,换成 Vite 能明显提升开发效率。至少我试过之后,再也不想等 Webpack 的进度条了。

这篇文章对你有帮助吗?

发表回复