Vite 配置与优化全攻略:从入门到实战

301 阅读3分钟

本文将深度解析 Vite 的核心配置与优化策略,结合实际场景,掌握从开发调试到生产部署的全流程优化技巧。

一、Vite 核心配置详解

1.1 基础配置:定义项目边界

// vite.config.js
import { defineConfig } from 'vite'
import path from 'path'

export default defineConfig({
  root: path.resolve(__dirname, 'src'), // 项目根目录
  base: '/my-app/', // 部署基础路径
  publicDir: 'static', // 静态资源目录
  envDir: './env', // 环境变量目录
  mode: 'production' // 指定运行模式
})

关键配置项

  • root: 定义项目源码目录,影响所有路径解析
  • base: 重要!影响构建后的资源引用路径(如 CDN 部署)
  • publicDir: 存放无需打包的静态资源(如 favicon.ico)

1.2 开发服务器配置:提升调试体验

export default defineConfig({
  server: {
    port: 3000,
    host: '0.0.0.0', // 允许外网访问
    proxy: {
      '/api': {
        target: 'http://localhost:3001',
        changeOrigin: true,
        rewrite: path => path.replace(/^\/api/, '')
      }
    },
    open: true, // 启动自动打开浏览器
    https: true // 启用 HTTPS 开发环境
  }
})

面试考点

  • 代理配置如何解决跨域问题?
  • host: '0.0.0.0' 的作用是什么?

1.3 构建配置:生产环境优化

export default defineConfig({
  build: {
    outDir: 'dist', // 输出目录
    assetsDir: 'assets', // 静态资源子目录
    assetsInlineLimit: 4096, // 小资源内联阈值
    rollupOptions: {
      output: {
        manualChunks: {
          vue: ['vue', 'vue-router', 'pinia'], // 手动拆分第三方依赖
          lodash: ['lodash-es']
        }
      },
      external: ['vue'] // 标记外部依赖(通过 CDN 引入)
    },
    minify: 'terser' // 使用更激进的压缩算法
  }
})

优化技巧

  • 通过 manualChunks 实现代码分割,减少首屏加载时间
  • 使用 external 配合 CDN 加速第三方库加载

二、开发环境优化:让 HMR 飞起来

2.1 依赖预构建:Vite 的性能魔法

Vite 通过 Esbuild 预构建依赖,解决:

  1. CommonJS → ESM 转换:兼容旧版模块
  2. 依赖合并:减少网络请求量
  3. 缓存机制:避免重复编译

配置示例

export default defineConfig({
  optimizeDeps: {
    include: ['axios', 'lodash-es'], // 强制预构建
    exclude: ['@vue/compiler-dom'] // 排除预构建
  }
})

面试问题

  • 为什么需要依赖预构建?
  • 预构建失败时如何排查?

2.2 HMR 热更新优化

Vite 的 HMR 机制基于原生 ESM,仅更新修改模块,实现:

  • 毫秒级更新:无需全量刷新
  • 精准更新:仅影响相关模块

最佳实践

  • 避免在全局作用域修改状态(如 Vuex 的 store)
  • 合理拆分组件,控制单个模块体积

三、生产环境优化:构建速度与输出质量

3.1 代码分割与懒加载

通过动态导入实现按需加载:

// 路由配置示例
const router = createRouter({
  routes: [
    {
      path: '/dashboard',
      component: () => import('./views/Dashboard.vue') // 懒加载
    }
  ]
})

优化效果

  • 减少首屏加载体积
  • 提升页面初始加载速度

3.2 资源压缩与优化

  • 启用 Terser 压缩:比默认 esbuild 压缩率更高
  • 图片优化:使用 vite-plugin-imagemin 自动压缩图片
  • 字体优化:通过 vite-plugin-font-optimization 合并字体文件

配置示例

import viteImagemin from 'vite-plugin-imagemin'

export default defineConfig({
  plugins: [
    viteImagemin({
      gifsicle: { optimizationLevel: 3 },
      mozjpeg: { quality: 80 }
    })
  ]
})

3.3 兼容性处理:旧浏览器支持

使用 @vitejs/plugin-legacy 生成兼容代码:

import legacy from '@vitejs/plugin-legacy'

export default defineConfig({
  plugins: [
    legacy({
      targets: ['ie >= 11'],
      additionalLegacyPolyfills: ['regenerator-runtime/runtime']
    })
  ]
})

注意事项

  • 会增加构建体积,需权衡兼容性与性能

四、Vite 插件生态:扩展无限可能

4.1 常用插件推荐

  • unplugin-auto-import:自动导入 API(如 Vue 组合式函数)
  • vite-plugin-compression:生成 gzip/brotli 压缩文件
  • vite-plugin-pages:文件系统路由(类似 Nuxt)
  • vite-plugin-pwa:快速集成 PWA 功能

4.2 自定义插件开发

// 示例:日志插件
export default function logPlugin() {
  return {
    name: 'log-plugin',
    transform(code, id) {
      console.log(`Processing file: ${id}`)
      return code
    }
  }
}

五、总结:Vite 优化核心原则

  1. 开发环境

    • 利用原生 ESM 特性,实现快速冷启动
    • 通过依赖预构建和 HMR 优化调试体验
  2. 生产环境

    • 合理拆分代码,利用缓存策略
    • 压缩资源,通过 CDN 加速第三方依赖
  3. 通用原则

    • 善用插件生态,避免重复造轮子
    • 持续监控构建指标(如首屏加载时间)