什么是 Vite - 下一代前端构建工具
一、核心要点速览
💡 核心考点
- Vite: 法语意为"快速",由 Vue 作者尤雨溪开发
- 核心理念: 开发环境使用原生 ESM,生产环境使用 Rollup 打包
- 关键特性: 极速冷启动、即时 HMR、按需编译
二、为什么需要 Vite
传统打包器的问题
Webpack 的问题:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
❌ 冷启动慢
项目启动流程:
1. 解析入口文件
2. 递归分析所有依赖
3. 构建完整的依赖图
4. 打包成 bundle
5. 启动开发服务器
❌ 大型项目可能需要 1-5 分钟
❌ HMR 延迟高
修改文件后需要重新构建 bundle
随着项目增大,HMR 变慢
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━Vite 的解决方案
Vite 的优势:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✓ 利用原生 ESM
现代浏览器支持 ES Modules
<script type="module">
✓ 无需打包即可直接运行
✓ 按需编译
只编译当前访问的页面
✓ 启动时间与项目大小无关
✓ 智能缓存
依赖预构建并缓存
✓ 二次启动更快
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━三、工作原理
开发环境 vs 生产环境
┌──────────────────────────────────────────────────────────┐
│ Vite 工作原理 │
└──────────────────────────────────────────────────────────┘
开发环境:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. 启动开发服务器 (~50ms)
↓
2. 浏览器请求 index.html
↓
3. 返回 HTML(含 script module)
↓
4. 浏览器按需请求模块
├─ node_modules/* → esbuild 预构建
└─ src/* → 按需编译
↓
5. 浏览器渲染
✓ 启动时间与项目大小无关
✓ HMR < 100ms
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
生产环境:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. 执行 vite build
↓
2. 使用 Rollup 打包
↓
3. 代码分割 + 优化
↓
4. 输出到 dist/
为什么用 Rollup?
✓ Tree Shaking 更彻底
✓ 生成的代码更简洁
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━四、核心特性
1. 基于 ESM 的开发服务器
javascript
// Vite 自动识别并处理各种模块格式
// ✓ 原生 ESM 导入
import { createApp } from 'vue'
import App from './App.vue'
// ✓ TypeScript 直接支持
import { sum } from './utils.ts'
// ✓ CSS 模块化
import styles from './App.module.scss'
// ✓ 动态导入(自动代码分割)
const Module = () => import('./heavy-module')2. 即时热更新 (HMR)
HMR 性能对比:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
项目规模:1000+ 文件
Webpack HMR: 2-10 秒
Vite HMR: < 100ms
性能提升:20-100 倍!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━3. 开箱即用
Vite 内置支持:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✓ TypeScript (.ts, .tsx)
✓ JSX/TSX (.jsx, .tsx)
✓ CSS 预处理器 (Sass, Less, Stylus)
✓ CSS Modules
✓ 静态资源 (图片、字体、视频)
✓ JSON 文件
✓ Web Assembly
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━五、快速开始
创建项目
bash
# 使用 pnpm(推荐)
pnpm create vite my-app --template vue
# 进入目录并安装依赖
cd my-app
pnpm install
# 启动开发服务器
pnpm dev基础配置
javascript
// vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
export default defineConfig({
plugins: [vue()],
server: {
port: 3000,
open: true
},
build: {
outDir: 'dist'
}
})六、性能优势
启动速度对比
启动时间对比:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
小型项目(< 100 文件):
Webpack: 8 秒
Vite: < 100ms
提升:约 80 倍
中型项目(100-500 文件):
Webpack: 15 秒
Vite: < 200ms
提升:约 75 倍
大型项目(> 500 文件):
Webpack: 30-60 秒
Vite: < 500ms
提升:约 60-120 倍
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━七、面试标准回答
Vite 是下一代前端构建工具,由 Vue 作者尤雨溪开发,名字在法语中意为"快速"。它的核心理念是利用现代浏览器的原生 ESM 能力,实现极速的开发体验。
工作原理分为两个环境:
开发环境:Vite 不进行打包,而是启动一个开发服务器,利用浏览器原生的
<script type="module">支持。浏览器按需请求模块,Vite 使用 esbuild 预构建依赖,源码则按需编译。这使得启动时间与项目大小无关,通常只需几十毫秒。生产环境:Vite 使用 Rollup 进行打包,因为 Rollup 生成的代码更紧凑,Tree Shaking 更彻底。
主要优势:
- 极速冷启动:启动时间 < 100ms,与项目大小无关
- 即时 HMR:热更新速度 < 100ms,比 Webpack 快 20-100 倍
- 开箱即用:内置 TypeScript、CSS 预处理器等支持
- 强大插件:兼容 Rollup 插件接口
适用场景:现代浏览器项目、Vue3/React 项目、追求开发效率的团队。对于需要支持 IE 的项目,可以使用 @vitejs/plugin-legacy 或继续使用 Webpack。
八、优缺点总结
优点 ✓:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✓ 极速的开发体验(启动 < 100ms)
✓ 配置简单,开箱即用
✓ 更好的 TypeScript 支持
✓ 更小的体积(核心库仅 1KB)
✓ 强大的插件兼容性
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
缺点 ✗:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✗ 浏览器兼容性要求高(需要支持原生 ESM)
✗ 生态不够成熟(插件数量较少)
✗ SSR 支持待完善
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━九、记忆口诀
Vite 歌诀:
Vite 名字意为快,
原生 ESM 是核心。
开发环境不打包,
按需加载真聪明。
esbuild 预构建,
Rollup 做生产。
启动只要百毫秒,
HMR 也飞快!十、推荐资源
十一、总结一句话
Vite: 原生 ESM + esbuild + Rollup = 极速开发体验 ⚡