Vite 插件
提升开发体验的 Vite 插件集合,优化构建流程和开发效率。
📋 已完成的工具页面
🗂️ 完整插件分类
🚀 开发体验
- 自动导入: ✅ 已完成 - unplugin-auto-import, unplugin-vue-components
- 组件库按需导入: unplugin-vue-components (Element Plus, Ant Design Vue, Naive UI)
- 图标自动导入: unplugin-icons, vite-plugin-svg-icons
- API 自动导入: unplugin-auto-import (Vue, Vue Router, Pinia, VueUse)
- 热更新增强: vite-plugin-restart, vite-plugin-full-reload
📦 构建优化
- 压缩: vite-plugin-compression (Gzip, Brotli)
- 图片优化: vite-plugin-imagemin, vite-plugin-image-optimizer
- 代码分割: vite-plugin-chunk-split
- CDN 加速: vite-plugin-cdn-import
- 打包分析: rollup-plugin-visualizer
- 移除 console: vite-plugin-remove-console
🎨 UI/样式
- SVG 组件: vite-svg-loader, vite-plugin-svg-icons
- UnoCSS: @unocss/vite
- Tailwind CSS: 内置支持
- CSS 预处理器: 内置支持 (Sass, Less, Stylus)
- PostCSS: 内置支持
📝 文档与类型
- Markdown: vite-plugin-md, vite-plugin-vue-markdown
- 类型检查: vite-plugin-checker (TypeScript, ESLint, Stylelint)
- API 文档: vite-plugin-api-doc
- 组件文档: vitepress, histoire
🔧 工具集成
- Mock 数据: vite-plugin-mock, vite-plugin-fake-server
- 环境变量: vite-plugin-env-compatible
- PWA: vite-plugin-pwa
- Electron: vite-plugin-electron
- SSR: vite-plugin-ssr, vite-ssr
🌐 框架集成
- Vue: @vitejs/plugin-vue, @vitejs/plugin-vue-jsx
- React: @vitejs/plugin-react, @vitejs/plugin-react-swc
- Svelte: @sveltejs/vite-plugin-svelte
- Solid: vite-plugin-solid
- Preact: @preact/preset-vite
📊 性能监控
- 性能分析: vite-plugin-inspect
- 打包分析: rollup-plugin-visualizer
- 构建报告: vite-plugin-build-info
- 依赖分析: vite-plugin-deps
🔐 安全与优化
- 代码混淆: vite-plugin-obfuscator
- License 检查: vite-plugin-license
- 环境变量加密: vite-plugin-env-encryption
- 资源内联: vite-plugin-inline
🧪 测试与调试
- 单元测试: vitest
- E2E 测试: @vitejs/plugin-legacy
- 调试工具: vite-plugin-debug
- 错误追踪: vite-plugin-sentry
🎯 特殊功能
- 国际化: vite-plugin-i18n, vite-plugin-vue-i18n
- 路由生成: vite-plugin-pages, vite-plugin-vue-router
- 布局系统: vite-plugin-vue-layouts
- 元数据: vite-plugin-html, vite-plugin-meta
- 注入脚本: vite-plugin-inject
💡 使用建议
基础配置
适合大多数 Vue 3 项目的基础插件配置:
typescript
// vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
export default defineConfig({
plugins: [
vue(),
AutoImport({
imports: ['vue', 'vue-router', 'pinia']
}),
Components({
dirs: ['src/components']
})
]
})进阶配置
包含性能优化和开发体验增强:
typescript
// vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import compression from 'vite-plugin-compression'
import { visualizer } from 'rollup-plugin-visualizer'
export default defineConfig({
plugins: [
vue(),
// 自动导入
AutoImport({
imports: ['vue', 'vue-router', 'pinia', '@vueuse/core'],
resolvers: [ElementPlusResolver()],
dts: 'src/auto-imports.d.ts'
}),
// 组件自动导入
Components({
resolvers: [ElementPlusResolver()],
dts: 'src/components.d.ts'
}),
// Gzip 压缩
compression({
algorithm: 'gzip',
ext: '.gz'
}),
// 打包分析
visualizer({
open: true,
gzipSize: true,
brotliSize: true
})
]
})完整配置
生产级项目的完整配置:
typescript
// vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import Icons from 'unplugin-icons/vite'
import IconsResolver from 'unplugin-icons/resolver'
import compression from 'vite-plugin-compression'
import { visualizer } from 'rollup-plugin-visualizer'
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import viteImagemin from 'vite-plugin-imagemin'
import { VitePWA } from 'vite-plugin-pwa'
import path from 'path'
export default defineConfig({
plugins: [
vue(),
vueJsx(),
// 自动导入 API
AutoImport({
imports: [
'vue',
'vue-router',
'pinia',
'@vueuse/core'
],
resolvers: [
ElementPlusResolver(),
IconsResolver()
],
dts: 'src/auto-imports.d.ts',
dirs: ['src/composables', 'src/utils'],
eslintrc: {
enabled: true
}
}),
// 自动导入组件
Components({
resolvers: [
ElementPlusResolver(),
IconsResolver({
enabledCollections: ['ep']
})
],
dts: 'src/components.d.ts',
dirs: ['src/components'],
directoryAsNamespace: true
}),
// 图标自动导入
Icons({
autoInstall: true
}),
// SVG 图标
createSvgIconsPlugin({
iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')],
symbolId: 'icon-[dir]-[name]'
}),
// 图片压缩
viteImagemin({
gifsicle: {
optimizationLevel: 7,
interlaced: false
},
optipng: {
optimizationLevel: 7
},
mozjpeg: {
quality: 80
},
pngquant: {
quality: [0.8, 0.9],
speed: 4
},
svgo: {
plugins: [
{
name: 'removeViewBox'
},
{
name: 'removeEmptyAttrs',
active: false
}
]
}
}),
// Gzip 压缩
compression({
algorithm: 'gzip',
ext: '.gz',
threshold: 10240,
deleteOriginFile: false
}),
// Brotli 压缩
compression({
algorithm: 'brotliCompress',
ext: '.br',
threshold: 10240,
deleteOriginFile: false
}),
// PWA
VitePWA({
registerType: 'autoUpdate',
manifest: {
name: 'My App',
short_name: 'App',
theme_color: '#ffffff'
}
}),
// 打包分析
visualizer({
open: true,
gzipSize: true,
brotliSize: true
})
],
build: {
// 代码分割
rollupOptions: {
output: {
manualChunks: {
'vue-vendor': ['vue', 'vue-router', 'pinia'],
'element-plus': ['element-plus'],
'utils': ['lodash-es', 'dayjs']
}
}
},
// 压缩配置
minify: 'terser',
terserOptions: {
compress: {
drop_console: true,
drop_debugger: true
}
}
}
})🎯 选择建议
小型项目
- ✅ @vitejs/plugin-vue
- ✅ unplugin-auto-import
- ✅ unplugin-vue-components
中型项目
- ✅ 小型项目的所有插件
- ✅ vite-plugin-compression
- ✅ rollup-plugin-visualizer
- ✅ unplugin-icons
大型项目
- ✅ 中型项目的所有插件
- ✅ vite-plugin-imagemin
- ✅ vite-plugin-pwa
- ✅ vite-plugin-checker
- ✅ vite-plugin-svg-icons
📚 学习资源
官方文档
插件市场
社区资源
💡 贡献说明
本插件集持续更新中,如果你有推荐的 Vite 插件,欢迎贡献!
每个插件页面包含:
- 📦 插件介绍和特点
- 💻 安装和配置方式
- 🎯 使用示例(TypeScript)
- 📊 插件对比
- ✨ 最佳实践