webpack打包优化

Webpack 的优化点很多,可以分成 构建速度优化打包体积优化 两大类。下面给你整理一份比较系统的清单:


🔹 一、构建速度优化

减少打包时间,让开发体验更流畅。

  1. 合理使用 mode

    • 开发环境:mode: "development",默认不开启压缩,构建快。
    • 生产环境:mode: "production",自动启用压缩、tree-shaking 等。
  2. 开启缓存

    • 持久化缓存(Webpack 5 内置):

      css 复制代码
      cache: {
        type: "filesystem"
      }

      会把模块和构建结果缓存到硬盘,下次构建直接复用。

  3. 多进程/多线程

    • 使用 thread-loaderparallel-webpack

      css 复制代码
      {
        loader: "thread-loader",
        options: { workers: 2 }
      }
  4. 缩小构建范围

    • 配置 include / exclude,减少 babel-loader 等 loader 的处理范围。
    • 合理使用 resolve.modulesresolve.alias,避免层层查找。
  5. DLL / externals

    • 较老的方法:DllPlugin 提前打包不常改动的库。
    • 或者 externals 把第三方库(React、Vue)交给 CDN,不参与打包。
  6. 增量构建

    • 使用 webpack-dev-serverHMR(热更新) ,只重新编译改动部分。

🔹 二、打包体积优化

减少产物大小,提升加载速度。

  1. Tree-Shaking

    • Webpack 2+ 内置,前提是:

      • 使用 ES Module (import/export)。
      • sideEffects: false 或者指定有副作用的文件。
    • 配合 TerserPlugin 去除无用代码。

  2. 代码分割(Code Splitting)

    • 使用 optimization.splitChunks 拆分公共依赖。
    • 动态 import(),实现按需加载。
  3. 压缩与优化

    • JS 压缩:默认 TerserPlugin
    • CSS 压缩:css-minimizer-webpack-plugin
    • 图片压缩:image-minimizer-webpack-plugin(或构建时用 tinypng)。
  4. 减少 polyfill 体积

    • 按需引入 polyfill:core-js + @babel/preset-env + useBuiltIns: "usage"
  5. Scope Hoisting(作用域提升)

    • optimization.concatenateModules: true,减少函数包装。
  6. 使用更小的依赖

    • Lodash → lodash-es + babel-plugin-lodash
    • Moment.js → dayjs
    • antd → 按需加载 babel-plugin-import
  7. 懒加载资源

    • 路由级代码分割。
    • 大图、视频采用延迟加载(react-lazyloadloading="lazy")。

🔹 三、生产部署优化

  1. 开启 Gzip 或 Brotli

    • 使用 compression-webpack-plugin 生成 .gz / .br 文件,配合 Nginx。
  2. CDN 加速

    • 静态资源放到 CDN,减少服务器压力。
  3. 长缓存优化

    • output.filename: '[name].[contenthash].js'
    • 确保修改后才更新 hash,未修改的文件可走浏览器缓存。
  4. Preload / Prefetch

    • 提前加载关键资源:

      ini 复制代码
      <link rel="preload" as="script" href="main.js" />
      <link rel="prefetch" href="chunk-vendors.js" />

👉 总结:

  • 开发阶段:缓存、HMR、多进程、缩小 loader 范围。
  • 生产阶段:Tree-shaking、代码分割、压缩优化、缓存策略、CDN。

相关推荐
漂流瓶jz20 小时前
Polyfill方式解决前端兼容性问题:core-js包结构与各种配置策略
前端·javascript·webpack·ecmascript·babel·polyfill·core-js
weixin_427771615 天前
Vite 与 Webpack 模块解析差异
前端·webpack·node.js
鲨莎分不晴5 天前
【实战】老项目焕发新生:从 Webpack 平滑迁移到 Vite 避坑全记录
前端·webpack·node.js
迦南giser6 天前
webpack从0到1详解
前端·javascript·css·webpack·node.js
C_心欲无痕6 天前
构建工具中的 hash 与 contenthash作用:以 Webpack 和 Vite 为例
算法·webpack·哈希算法
eason_fan7 天前
Rspack核心解析:Rust重写Webpack的性能革命与本质
前端·前端工程化
m0_741412248 天前
Webpack:F:\nochinese_path\React_code\webpack
前端·react.js·webpack
烟锁池塘柳08 天前
C++程序脱离环境运行:详解OpenCV动态库依赖部署 (Deployment)
c++·opencv·webpack
怒放的生命19918 天前
pnpm + Monorepo 使用教程(集成 Vue 3 项目)
前端·vue.js·pnpm·monorepo·前端工程化
前端大波9 天前
使用webpack-bundle-analyzer 对 react 老项目进行打包优化
前端·react.js·webpack·性能优化