Vite vs Webpack 打包配置优化指南

在前端构建工具中,ViteWebpack 是两大主流选择,它们的优化策略截然不同。无论是面试还是实战,掌握Vite或者Webpack打包配置优化都是 Vue 开发的必备技能。

优化目标对比

优化方向 Vite 侧重点 Webpack 侧重点
构建速度 利用浏览器原生ESM实现秒级启动 通过缓存和并行编译加速
产物体积 默认支持Tree Shaking 需手动配置代码分割和压缩
开发体验 热更新速度极快 需合理配置HMR

Vite 配置优化方案

1. 加速依赖预构建

arduino 复制代码
// vite.config.js
export default {
  optimizeDeps: {
    include: ['lodash-es'], // 强制预构建指定依赖
    exclude: ['vue'],       // 排除不需要预构建的库
  }
}

作用:将常用依赖转为ESM格式缓存,提升二次启动速度

2. 分包策略优化

css 复制代码
build: {
  rollupOptions: {
    output: {
      manualChunks: {
        'vendor': ['vue', 'vue-router'],
        'utils': ['lodash-es', 'axios']
      }
    }
  }
}

效果:将第三方库单独打包,利用浏览器缓存

3. 图片压缩配置

css 复制代码
import viteImagemin from 'vite-plugin-imagemin';
build: {
  plugins: [
    viteImagemin({
      gifsicle: { optimizationLevel: 3 },
      mozjpeg: { quality: 75 }
    })
  ]
}

Webpack 配置优化方案

1. 缓存加速构建

java 复制代码
// webpack.config.js
module.exports = {
  cache: {
    type: 'filesystem', // 使用持久化缓存
  },
  module: {
    rules: [{
      test: /.js$/,
      loader: 'babel-loader',
      options: { cacheDirectory: true } // Babel缓存
    }]
  }
}

2. 多进程编译

javascript 复制代码
const TerserPlugin = require('terser-webpack-plugin');
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');

module.exports = {
  optimization: {
    minimizer: [
      new TerserPlugin({ parallel: true }), // JS多线程压缩
      new CssMinimizerPlugin(),             // CSS压缩
    ],
  },
  plugins: [
    new ThreadLoader({ workers: 4 }) // 多进程loader
  ]
}

3. 精细化代码分割

yaml 复制代码
optimization: {
  splitChunks: {
    chunks: 'all',
    maxSize: 244 * 1024, // 单文件最大244KB
    cacheGroups: {
      vendors: {
        test: /[\/]node_modules[\/]/,
        priority: -10
      }
    }
  }
}

通用优化策略

1. Tree Shaking 增强

arduino 复制代码
// 两者通用配置
{
  sideEffects: false // 在package.json中声明
}

2. Gzip/Brotli 压缩

javascript 复制代码
// Vite
import viteCompression from 'vite-plugin-compression';
plugins: [viteCompression()]

// Webpack
const CompressionPlugin = require('compression-webpack-plugin');
plugins: [new CompressionPlugin()]

3. 可视化分析工具

bash 复制代码
# Vite
npm install rollup-plugin-visualizer

# Webpack
npm install webpack-bundle-analyzer

建议

  • 新项目:首选 Vite(特别是 Vue/React 项目)
  • 存量项目:Webpack 逐步迁移或针对性优化
  • 微前端:Webpack 的 Module Federation 更成熟
相关推荐
水银嘻嘻19 分钟前
12 web 自动化之基于关键字+数据驱动-反射自动化框架搭建
运维·前端·自动化
it_remember20 分钟前
新建一个reactnative 0.72.0的项目
javascript·react native·react.js
小嘟嚷ovo41 分钟前
h5,原生html,echarts关系网实现
前端·html·echarts
十一吖i1 小时前
Vue3项目使用ElDrawer后select方法不生效
前端
只可远观1 小时前
Flutter目录结构介绍、入口、Widget、Center组件、Text组件、MaterialApp组件、Scaffold组件
前端·flutter
周胡杰1 小时前
组件导航 (HMRouter)+flutter项目搭建-混合开发+分栏效果
前端·flutter·华为·harmonyos·鸿蒙·鸿蒙系统
敲代码的小吉米1 小时前
前端上传el-upload、原生input本地文件pdf格式(纯前端预览本地文件不走后端接口)
前端·javascript·pdf·状态模式
是千千千熠啊1 小时前
vue使用Fabric和pdfjs完成合同签章及批注
前端·vue.js
da-peng-song2 小时前
ArcGIS Desktop使用入门(二)常用工具条——数据框工具(旋转视图)
开发语言·javascript·arcgis
九月TTS2 小时前
TTS-Web-Vue系列:组件逻辑分离与模块化重构
前端·vue.js·重构