引言
随着前端项目复杂度的不断提高,开发者对构建工具的要求也越来越高。我们需要更快的启动时间、更高效的热更新和更优化的构建结果。Vite 作为一个由 Vue.js 创建者尤雨溪开发的新一代前端构建工具,正是为了解决这些问题而诞生的。本文将深入探讨 Vite 的优势、核心特性以及它与传统构建工具的对比。
Vite(法语中"快"的意思)名副其实地提供了极速的开发体验。它主要解决了以下痛点:
Vite 通过利用现代浏览器已经支持 ES 模块的特性,以及将应用中的模块分为依赖和源码两类并分别处理,实现了上述问题的优雅解决。
使用 npm:
# npm 6.x
npm create vite@latest my-vite-app --template vue
# npm 7+
npm create vite@latest my-vite-app -- --template vue
使用 yarn:
yarn create vite my-vite-app --template vue
使用 pnpm:
pnpm create vite my-vite-app --template vue
Vite 提供多种模板,常见的有:
vanilla
- 原生 JavaScript(纯 JavaScript 项目,没有任何框架)
vue
- Vue(Vue 3 项目)
vue-ts
- Vue + TypeScript(带 TypeScript 的 Vue 3 项目)
react
- React(React 项目)
react-ts
- React + TypeScript(带 TypeScript 的 React 项目)
preact
- Preact(Preact 项目)
lit
- Lit(Lit 项目)
svelte
- Svelte(Svelte 项目)
Vite 中的模板本质上是一套预配置的项目脚手架,帮助开发者快速启动特定类型的项目,而无需手动设置所有初始配置。选择合适的模板可以大大减少项目初始化的时间和复杂度,让您更快地投入到实际业务逻辑的开发中。
如果您想在现有项目中集成 Vite,可以按照以下步骤操作:
安装 Vite 及相关依赖:
# 使用 npm
npm install vite @vitejs/plugin-vue --save-dev # Vue 项目
# 或
npm install vite @vitejs/plugin-react --save-dev # React 项目
# 使用 yarn
yarn add vite @vitejs/plugin-vue -D # Vue 项目
# 或
yarn add vite @vitejs/plugin-react -D # React 项目
# 使用 pnpm
pnpm add vite @vitejs/plugin-vue -D # Vue 项目
# 或
pnpm add vite @vitejs/plugin-react -D # React 项目
创建 Vite 配置文件 vite.config.js
:
// Vue 项目配置示例
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
'@': path.resolve(__dirname, './src')
}
},
server: {
port: 3000,
open: true,
proxy: {
'/api': {
target: 'http://jsonplaceholder.typicode.com',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, '')
}
}
}
})
// React 项目配置示例
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import path from 'path'
export default defineConfig({
plugins: [react()],
resolve: {
alias: {
'@': path.resolve(__dirname, './src')
}
},
server: {
port: 3000,
open: true
}
})
修改项目入口文件:
对于 HTML 入口文件,您需要将原有的脚本引用改为 ESM 方式:
Vite App
更新 package.json 脚本:
{
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
}
}
npm install vite @vitejs/plugin-vue --save-dev
vite.config.js
文件vue.config.js
中的配置转换到 vite.config.js
package.json
中的脚本npm install vite @vitejs/plugin-react --save-dev
vite.config.js
文件.env
文件中的环境变量前缀从 REACT_APP_
更改为 VITE_
package.json
中的脚本Vite 天然支持 TypeScript,只需创建 tsconfig.json
文件:
{
"compilerOptions": {
"target": "ESNext",
"useDefineForClassFields": true,
"module": "ESNext",
"lib": ["ESNext", "DOM"],
"moduleResolution": "Node",
"strict": true,
"sourceMap": true,
"resolveJsonModule": true,
"isolatedModules": true,
"esModuleInterop": true,
"noEmit": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noImplicitReturns": true,
"skipLibCheck": true,
"jsx": "preserve"
},
"include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"]
}
安装相应预处理器:
# Sass
npm install -D sass
# Less
npm install -D less
# Stylus
npm install -D stylus
之后可以直接导入相应文件:
import './style.scss' // 将自动处理
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
tailwind.config.js
:创建 CSS 文件:
/* src/index.css */
@tailwind base;
@tailwind components;
@tailwind utilities;
Vite 的开发服务器直接利用浏览器原生的 ES 模块功能
// main.js
import { createApp } from 'vue'
import App from './App.vue'
import './index.css'
createApp(App).mount('#app')
当浏览器请求这个文件时,Vite 会拦截请求并进行按需转换和提供服务:
浏览器发起对 /src/main.js
的请求,Vite 转换并提供该文件。浏览器解析该文件中的 import 语句,然后对每个导入模块发起新的 HTTP 请求,这个过程是并行的,无需等待整个依赖图构建完成。
为了提高性能,Vite 将 node_modules
中的依赖预先构建:
// vite.config.js
export default {
optimizeDeps: {
include: ['vue', 'vue-router', 'pinia'], // 强制预构建的依赖
exclude: ['large-unused-library'] // 排除特定依赖
}
}
预构建的过程通过 esbuild 完成,比传统的 webpack + babel 组合快 10-100 倍。
Vite 提供了极速的热模块替换功能
// 一个支持 HMR 的模块示例
export const count = 0
if (import.meta.hot) {
import.meta.hot.accept((newModule) => {
// 获取更新后的模块导出
console.log('模块更新了, 新的计数:', newModule.count)
})
}
Vite 的 HMR API 基于原生 ESM,当文件变更时,Vite 只需精确地使失效的模块与其最近的 HMR 边界(大多数时候只是单个文件)之间的链失效,使 HMR 更新始终快速,无论应用大小如何。
启动速度:
热更新性能:
配置复杂度:
构建速度:
相似点:
不同点:
Parcel:
Vite:
Vite 作为新一代的前端构建工具,凭借其极速的开发服务器启动速度、高效的热模块替换和优秀的生产构建性能,已经成为现代前端开发的重要选择。相比传统的 Webpack,Vite 不仅提供了更好的开发体验,还简化了配置过程,让开发者能够更专注于业务代码的编写。
Vite 的优势主要体现在:
对于新项目,直接选择 Vite 作为构建工具是明智之选;对于现有项目,虽然迁移需要一定工作量,但考虑到其带来的开发体验提升,迁移也是值得的。随着前端开发工具链的不断演进,Vite 代表了现代化前端工程的发展方向,值得每一位开发者学习和尝试。