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 更成熟
相关推荐
mumu1307梦1 分钟前
html 占位符
前端·javascript·html
WY8 分钟前
前端项目部署:Nginx 从入门到实战
前端
Apifox13 分钟前
Apifox 9 月更新| AI 生成接口测试用例、在线文档调试能力全面升级、内置更多 HTTP 状态码、支持将目录转换为模块
前端·后端·测试
用户4582031531713 分钟前
CSS性能优化全攻略:提升页面加载与渲染速度
前端·css
90后的晨仔43 分钟前
Vue 组件事件完全指南:子父组件通信的艺术
前端·vue.js
90后的晨仔1 小时前
Vue 组件通信全解
前端
正义的大古1 小时前
OpenLayers地图交互 -- 章节十六:双击缩放交互详解
javascript·vue.js·openlayers
golang学习记1 小时前
从0死磕全栈之Next.js 中的 CSS 方案全解析:Global CSS、CSS Modules、Tailwind CSS 怎么选?
前端
Waker1 小时前
🚀 Turbo 使用指南
前端
立方世界1 小时前
CSS水平垂直居中方法深度分析
前端·css