Vite 是一个现代化的前端构建工具,它主要由两部分组成:
-
一个开发服务器,它基于原生 ES 模块提供了丰富的内建功能,如速度快到惊人的模块热更新(HMR)。
-
一套构建指令,它使用 Rollup 打包你的代码,并且是预配置的,可输出用于生产环境的高度优化过的静态资源。
Vite 的特点:
-
极快的冷启动:利用浏览器对 ES 模块的支持,直接在浏览器中运行代码,不需要打包。
-
快速的热更新:无论应用大小,HMR 始终保持快速更新。
-
真正的按需编译:只在需要时编译当前屏幕显示的代码,而不是整个应用。
Vite 支持多种框架,如 Vue、React、Preact、Lit 等,并且提供了插件系统来扩展功能。
与传统的打包工具(如 Webpack)相比,Vite 在开发阶段不需要打包,因此启动速度非常快,尤其是在大型项目中。
下面是一个简单的 Vite 项目结构:
my-vite-app/
├── index.html
├── package.json
├── vite.config.js
└── src/
├── main.js
└── App.vue
在 Vite 中,index.html 是入口文件,你可以在其中通过 script 标签引入 main.js,并且 main.js 中可以使用 ES 模块语法。
Vite 的工作方式:
在开发阶段,Vite 启动一个开发服务器,当浏览器请求某个模块时,Vite 会实时编译这个模块然后返回。这种方式使得启动时间非常短,因为不需要等待整个应用打包。
在生产构建时,Vite 使用 Rollup 进行打包,并提供了许多优化,如代码分割、tree-shaking 等。
总结:Vite 旨在提供更快的开发体验和更简单的配置,同时在生产构建时也能输出高效的代码。
Vite 详细介绍
什么是 Vite?
Vite(法语意为"快速")是一个现代化的前端构建工具,由 Vue.js 作者尤雨溪创建。它旨在提供更快的开发体验和更高效的生产构建。
核心理念
1. 原生 ES 模块
// 传统构建工具需要打包才能运行
// Vite 直接在浏览器中使用 ES 模块
<script type="module" src="/src/main.js"></script>
2. 按需编译
-
只编译当前页面需要的模块
-
不需要等待整个应用打包完成
主要特点
1. 极速启动
-
冷启动时间极短(毫秒级)
-
基于原生 ES 模块,无需打包即可运行
2. 快速热更新
-
HMR(热模块替换)响应迅速
-
编辑后几乎立即看到变化
3. 开箱即用
-
支持 TypeScript、JSX、CSS 预处理器
-
内置对 Vue、React、Svelte 等框架的支持
架构原理
(1)配置解析
在启动 Vite 时,Vite 会读取 vite.config.js 文件,并使用 JavaScript 引擎对其进行解析。defineConfig 函数是一个辅助函数,它能确保配置对象的类型正确,并且在 TypeScript 项目中提供类型检查。
(2)插件机制
Vite 采用插件机制来扩展其功能。在解析配置文件时,Vite 会加载并执行配置中定义的插件。插件可以在 Vite 的不同生命周期钩子中执行特定的操作,例如在文件转换、模块解析、服务器启动等阶段进行干预。
(3)服务器和构建流程定制
根据配置文件中的 server 和 build 选项,Vite 会对开发服务器和构建过程进行相应的定制。例如,根据 server 选项配置开发服务器的端口、代理等;根据 build 选项配置构建输出目录、压缩工具等。
(4)模块解析和别名处理
在 resolve 选项中配置的别名会在模块解析阶段生效。当 Vite 解析模块导入语句时,会根据别名配置将别名替换为实际的路径,从而实现模块的正确引用。
开发模式
// Vite 的开发服务器架构
浏览器请求 → Vite 服务器 → 按需编译 → 返回浏览器
生产模式
// 使用 Rollup 进行构建
源代码 → Rollup 打包 → 优化输出 → 生产文件
与传统工具对比
| 特性 | Vite | Webpack | Parcel |
|---|---|---|---|
| 启动速度 | ⚡ 极快 | 🐢 慢 | 🚀 快 |
| HMR 速度 | ⚡ 极快 | 🐢 慢 | 🚀 快 |
| 配置复杂度 | 简单 | 复杂 | 简单 |
| 生态成熟度 | 快速增长 | 非常成熟 | 成熟 |
| 打包输出 | 高效 | 可配置 | 自动优化 |
核心功能
1. 开发服务器
# 启动开发服务器
npm run dev
# 或
vite
2. 构建命令
# 生产构建
npm run build
# 或
vite build
# 预览构建结果
npm run preview
# 或
vite preview
3. 支持的技术栈
-
框架: Vue 3、React、Preact、Svelte、Lit
-
语言: TypeScript、JavaScript、JSX、TSX
-
样式: CSS、Sass、Less、Stylus、PostCSS
-
静态资源: 图片、字体、JSON、Worker
插件生态系统
官方插件
import { defineConfig } from 'vite'
// Vue 插件
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
// React 插件
import react from '@vitejs/plugin-react'
import reactRefresh from '@vitejs/plugin-react-refresh'
社区插件
-
vite-plugin-pwa- PWA 支持 -
vite-plugin-svg-icons- SVG 图标 -
unplugin-vue-components- 自动导入组件 -
vite-plugin-mock- Mock 数据
实际应用示例
项目结构
my-vite-app/
├── src/
│ ├── assets/ # 静态资源
│ ├── components/ # 组件
│ ├── views/ # 页面
│ ├── store/ # 状态管理
│ ├── router/ # 路由
│ ├── styles/ # 样式文件
│ ├── utils/ # 工具函数
│ ├── main.js # 入口文件
│ └── App.vue # 根组件
├── public/ # 公共文件
├── index.html # 入口 HTML
├── vite.config.js # Vite 配置
├── package.json # 项目配置
└── README.md
快速创建项目
# 使用 npm
npm create vite@latest
# 或使用 yarn
yarn create vite
# 或使用 pnpm
pnpm create vite
项目模板选择
? Project name: › my-vite-app
? Select a framework: ›
❯ Vue
React
Preact
Lit
Svelte
Solid
Qwik
? Select a variant: ›
❯ JavaScript
TypeScript
Customize with create-vue
Nuxt
性能优势
1. 启动时间对比
// 大型项目(1000+ 模块)
- Webpack: 30-60秒
- Vite: 1-3秒
2. HMR 更新
// 修改单个组件
- Webpack: 2-10秒
- Vite: <100毫秒
3. 构建性能
// 生产构建
- Webpack: 复杂配置,构建时间长
- Vite: 使用 Rollup,优化更好
高级特性
1. 依赖预构建
// Vite 自动优化 node_modules
optimizeDeps: {
include: ['vue', 'vue-router', 'pinia']
}
2. 动态导入
// 自动代码分割
const module = await import('./module.js')
// 路由懒加载
const About = () => import('./views/About.vue')
3. CSS 处理
/* 支持 CSS 模块 */
.module-class {
color: red;
}
import styles from './styles.module.css'
4. 环境变量
// .env 文件
VITE_API_URL=https://api.example.com
// 代码中使用
console.log(import.meta.env.VITE_API_URL)
5. Worker 支持
// 直接导入 Worker
const worker = new Worker(new URL('./worker.js', import.meta.url))
适用场景
推荐使用 Vite
-
新项目 - 特别是中小型项目
-
原型开发 - 快速验证想法
-
教学演示 - 简化配置复杂度
-
现代框架项目 - Vue 3、React 18 等
可能需要考虑其他工具
-
大型遗留项目 - 迁移成本高
-
特殊构建需求 - 需要复杂 Webpack 插件
-
需要特定 Webpack 特性 - 如 DLL 插件
学习资源
官方资源
社区资源
总结
Vite 的优势:
-
🚀 极致的开发体验 - 快速启动和热更新
-
⚙️ 简单配置 - 减少构建配置的复杂度
-
📦 高效输出 - 优化的生产构建
-
🔌 丰富的生态 - 支持主流框架和工具
Vite 的不足:
-
对旧浏览器的支持有限
-
某些 Webpack 高级功能可能缺失
-
大型传统项目迁移需要工作
Vite 代表了前端构建工具的新方向,它通过拥抱现代 Web 标准,为开发者提供了更快、更简单的开发体验。对于大多数新项目来说,Vite 是一个优秀的选择。
Vite使用vite.config.js(或vite.config.ts)作为配置文件。以下是对vite.config.js的详细配置说明。
javascript
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
export default defineConfig({
// 项目根目录(index.html 文件所在的位置)
root: process.cwd(),
// 开发服务器配置
server: {
port: 3000, // 设置开发服务器端口
open: true, // 启动时自动打开浏览器
proxy: {
'/api': {
target: 'http://localhost:5000', // API 请求代理的目标地址
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ''),
},
},
},
// 构建配置
build: {
outDir: 'dist', // 指定输出目录
assetsDir: 'assets', // 静态资源存放的目录
sourcemap: true, // 是否生成 source map
rollupOptions: {
input: 'src/main.jsx', // 指定入口文件
output: {
manualChunks(id) {
if (id.includes('node_modules')) {
return id.toString().split('node_modules/')[1].split('/')[0].toString();
}
},
},
},
},
// 插件列表
plugins: [
react(), // 使用 React 插件
],
// 别名配置
resolve: {
alias: {
'@': '/src',
},
},
// CSS 相关配置
css: {
preprocessorOptions: {
less: {
additionalData: `@import "./src/styles/variables.less";`, // 全局引入 Less 变量
},
},
},
// JSON 解析配置
json: {
namedExports: true, // 支持从 JSON 文件中导入命名导出
},
// ESBuild 转译器配置
esbuild: {
jsxFactory: 'React.createElement',
jsxFragment: 'React.Fragment',
},
// 自定义全局变量注入到项目中
define: {
__APP_VERSION__: JSON.stringify(require('./package.json').version),
},
// 日志级别
logLevel: 'info',
// 清除终端输出缓存
clearScreen: false,
// 强制依赖预构建
force: false,
// 禁用监听模式
watch: {},
});