Vite 常用插件详解与使用指南

Vite 常用插件详解与使用指南

根据最新的技术资料,整理了 Vite 常用插件的详细介绍和使用方法:


📋 插件总览

插件 用途 安装命令
@vitejs/plugin-vue Vue 3 支持 npm i -D @vitejs/plugin-vue
@vitejs/plugin-react React 支持 npm i -D @vitejs/plugin-react
vite-plugin-svg-icons SVG 图标 npm i -D vite-plugin-svg-icons
vite-plugin-compression Gzip 压缩 npm i -D vite-plugin-compression
unplugin-auto-import 自动导入 npm i -D unplugin-auto-import
unplugin-vue-components 组件自动注册 npm i -D unplugin-vue-components

🔧 各插件详细使用

1. @vitejs/plugin-vue - Vue 3 支持

作用:解析 Vue 3 单文件组件(SFC),是 Vue 3 + Vite 项目的核心插件

安装

复制代码
npm i -D @vitejs/plugin-vue

配置示例 (vite.config.ts):

复制代码
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

export default defineConfig({
  plugins: [
    vue({
      // 可选配置
      script: {
        defineModel: true,  // 启用 defineModel
      },
      template: {
        compilerOptions: {
          // 自定义元素处理
          isCustomElement: tag => tag.startsWith('ion-')
        }
      }
    })
  ]
})

2. @vitejs/plugin-react - React 支持

作用:为 React 项目提供快速刷新(HMR)和 JSX 支持

安装

复制代码
npm i -D @vitejs/plugin-react

配置示例 (vite.config.ts):

复制代码
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

export default defineConfig({
  plugins: [
    react({
      // 可选配置
      include: '**/*.{jsx,tsx}',
      exclude: [],
      babel: {
        plugins: []  // 自定义 Babel 插件
      }
    })
  ]
})

3. vite-plugin-svg-icons - SVG 图标

作用:将 SVG 文件打包成 sprite 图标,支持按需加载,减少 HTTP 请求

安装

复制代码
npm i -D vite-plugin-svg-icons

配置示例 (vite.config.ts):

复制代码
import { defineConfig } from 'vite'
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import path from 'path'

export default defineConfig({
  plugins: [
    createSvgIconsPlugin({
      // 指定需要缓存的图标文件夹
      iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')],
      // 指定 symbolId 格式
      symbolId: 'icon-[dir]-[name]',
      // 自定义 DOM 操作
      customDomId: '__svg__icons__dom__',
    })
  ]
})

使用示例 (main.ts):

复制代码
// 注册 SVG 图标
import 'virtual:svg-icons-register'

组件中使用

复制代码
<template>
  <svg class="icon" aria-hidden="true">
    <use :xlink:href="`#icon-${iconName}`" />
  </svg>
</template>

4. vite-plugin-compression - Gzip 压缩

作用:构建时生成 .gz 或 .br 压缩文件,减少传输体积,提升加载速度

安装

复制代码
npm i -D vite-plugin-compression

配置示例 (vite.config.ts):

复制代码
import { defineConfig } from 'vite'
import viteCompression from 'vite-plugin-compression'

export default defineConfig({
  plugins: [
    // Gzip 压缩
    viteCompression({
      verbose: true,
      disable: false,
      threshold: 10240,  // 大于 10kb 的文件才压缩
      algorithm: 'gzip',
      ext: '.gz',
    }),
    // Brotli 压缩(压缩率更高)
    viteCompression({
      verbose: true,
      algorithm: 'brotliCompress',
      ext: '.br',
    })
  ]
})

Nginx 配置(启用压缩):

复制代码
gzip on;
gzip_types text/plain text/css application/json application/javascript;
gzip_min_length 1024;

5. unplugin-auto-import - API 自动导入

作用:自动导入 Vue/React API 和自定义函数,无需手动 import

安装

复制代码
npm i -D unplugin-auto-import

配置示例 (vite.config.ts):

复制代码
import { defineConfig } from 'vite'
import AutoImport from 'unplugin-auto-import/vite'

export default defineConfig({
  plugins: [
    AutoImport({
      // 自动导入 Vue 相关 API
      imports: ['vue', 'vue-router', 'pinia'],
      // 自动导入自定义函数
      dirs: ['src/composables/**', 'src/utils/**'],
      // 生成 TypeScript 声明文件
      dts: 'src/auto-imports.d.ts',
      // ESLint 配置
      eslintrc: {
        enabled: true,
        filepath: './.eslintrc-auto-import.json',
      }
    })
  ]
})

使用效果

复制代码
<!-- 无需手动导入,可直接使用 -->
<script setup>
const count = ref(0)
const router = useRouter()
const store = useStore()
</script>

6. unplugin-vue-components - 组件自动注册

作用:自动注册 Vue 组件,无需手动 import 和注册

安装

复制代码
npm i -D unplugin-vue-components

配置示例 (vite.config.ts):

复制代码
import { defineConfig } from 'vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

export default defineConfig({
  plugins: [
    Components({
      // 组件目录
      dirs: ['src/components'],
      // 文件扩展名
      extensions: ['vue', 'md'],
      // 自动导入 UI 库组件
      resolvers: [
        ElementPlusResolver(),
        // AntDesignVueResolver(),
        // TDesignResolver(),
      ],
      // 生成 TypeScript 声明
      dts: 'src/components.d.ts',
    })
  ]
})

使用效果

复制代码
<template>
  <!-- 直接使用,无需导入 -->
  <MyComponent />
  <ElButton>按钮</ElButton>
</template>

🎯 完整配置示例

vite.config.ts** 完整示例**:

复制代码
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import viteCompression from 'vite-plugin-compression'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import path from 'path'

export default defineConfig({
  plugins: [
    // Vue 3 支持
    vue(),
    
    // SVG 图标
    createSvgIconsPlugin({
      iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')],
      symbolId: 'icon-[dir]-[name]',
    }),
    
    // Gzip 压缩
    viteCompression({
      verbose: true,
      algorithm: 'gzip',
      threshold: 10240,
    }),
    
    // API 自动导入
    AutoImport({
      imports: ['vue', 'vue-router', 'pinia'],
      dirs: ['src/composables/**', 'src/utils/**'],
      dts: 'src/auto-imports.d.ts',
      resolvers: [ElementPlusResolver()],
    }),
    
    // 组件自动注册
    Components({
      dirs: ['src/components'],
      dts: 'src/components.d.ts',
      resolvers: [ElementPlusResolver()],
    }),
  ],
  
  resolve: {
    alias: {
      '@': path.resolve(__dirname, 'src'),
    },
  },
  
  server: {
    port: 3000,
    open: true,
    proxy: {
      '/api': {
        target: 'http://localhost:8080',
        changeOrigin: true,
      }
    }
  },
  
  build: {
    rollupOptions: {
      output: {
        manualChunks: {
          'vue-vendor': ['vue', 'vue-router', 'pinia'],
          'element-plus': ['element-plus'],
        }
      }
    }
  }
})

📦 其他推荐插件

插件 用途 安装命令
vite-plugin-inspect 插件调试分析 npm i -D vite-plugin-inspect
rollup-plugin-visualizer 打包体积分析 npm i -D rollup-plugin-visualizer
vite-plugin-pwa PWA 支持 npm i -D vite-plugin-pwa
vite-plugin-eslint ESLint 检查 npm i -D vite-plugin-eslint
unplugin-icons 图标自动导入 npm i -D unplugin-icons

💡 最佳实践建议

  1. 开发环境:优先配置自动导入类插件,提升开发效率
  2. 生产环境:启用压缩插件,优化打包体积
  3. TypeScript 项目 :确保生成 .d.ts 声明文件
  4. 大型项目:使用代码分割插件优化加载性能
  5. 调试需求 :配置 vite-plugin-inspect 分析插件执行

希望这份指南对您有帮助!

相关推荐
牛奶21 小时前
5MB vs 4KB vs 无限大:浏览器存储谁更强?
前端·浏览器·indexeddb
牛奶21 小时前
setTimeout设为0就马上执行?JS异步背后的秘密
前端·性能优化·promise
LaughingZhu1 天前
Product Hunt 每日热榜 | 2026-04-05
前端·数据库·人工智能·经验分享·神经网络
SuperEugene1 天前
Vue3 组件复用设计:Props / 插槽 / 组合式函数,三种复用方式选型|组件化设计基础篇
前端·javascript·vue.js
nFBD29OFC1 天前
利用Vue元素指令自动合并tailwind类名
前端·javascript·vue.js
ISkp3V8b41 天前
ASP.NET MVC]Contact Manager开发之旅之迭代2 - 修改样式,美化应用
前端·chrome
Highcharts.js1 天前
高级可视化图表的暗色模式与主题|Highcharts 自适应主题配色全解
前端·react.js·实时图表
zk_one1 天前
【无标题】
开发语言·前端·javascript
precious。。。1 天前
1.2.1 三角不等式演示
前端·javascript·html
小陈工1 天前
Python Web开发入门(十一):RESTful API设计原则与最佳实践——让你的API既优雅又好用
开发语言·前端·人工智能·后端·python·安全·restful