使用 Webpack 5 优化构建减少生成文件的体积提升前端性能

在使用 Webpack 5 时,优化构建以减少生成文件的体积是提升前端性能的重要一步。以下是一些常见的优化方法和策略:

1. 开启生产模式

确保构建时使用生产模式,Webpack 会自动应用多种优化(如代码压缩、Tree Shaking 等):

webpack --mode production

或在配置文件中明确设置:

module.exports = {
  mode: 'production',
};

2. 启用 Tree Shaking

Tree Shaking 是 Webpack 内置功能,用于删除未使用的代码。确保以下条件满足:

import { usedFunction } from './module';

在生产模式下,Webpack 会自动开启 Tree Shaking,无需额外配置。

3. 压缩 JavaScript 和 CSS

Webpack 5 内置了 TerserPlugin 来压缩 JavaScript:

const TerserPlugin = require('terser-webpack-plugin');

module.exports = {
  optimization: {
    minimize: true,
    minimizer: [new TerserPlugin()],
  },
};

压缩 CSS 时可以使用 css-minimizer-webpack-plugin

npm install css-minimizer-webpack-plugin --save-dev
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');

module.exports = {
  optimization: {
    minimize: true,
    minimizer: [
      '...',
      new CssMinimizerPlugin(),
    ],
  },
};

4. 分离第三方库(代码分割)

利用 Webpack 的 SplitChunksPlugin 将第三方库单独打包,避免重复加载:

module.exports = {
  optimization: {
    splitChunks: {
      chunks: 'all',
    },
  },
};

通过动态导入(import())进一步减少初始加载文件:

// 动态导入模块,仅在需要时加载
import('./largeModule').then((module) => {
  module.default();
});

5. 移除未使用的 CSS

使用工具如 purgecss-webpack-plugin 删除未被使用的 CSS:

npm install purgecss-webpack-plugin glob --save-dev
const PurgeCSSPlugin = require('purgecss-webpack-plugin');
const path = require('path');

module.exports = {
  plugins: [
    new PurgeCSSPlugin({
      paths: glob.sync(`${path.join(__dirname, 'src')}/**/*`, { nodir: true }),
    }),
  ],
};

6. 优化图片资源

使用 image-minimizer-webpack-plugin 来压缩图片:

npm install image-minimizer-webpack-plugin imagemin imagemin-mozjpeg imagemin-pngquant --save-dev
const ImageMinimizerPlugin = require('image-minimizer-webpack-plugin');

module.exports = {
  plugins: [
    new ImageMinimizerPlugin({
      minimizer: {
        implementation: ImageMinimizerPlugin.imageminGenerate,
        options: {
          plugins: [
            ['mozjpeg', { quality: 75 }],
            ['pngquant', { quality: [0.65, 0.9] }],
          ],
        },
      },
    }),
  ],
};

7. 减少 Polyfill 和第三方库体积

  • 按需引入:仅引入所需的模块,例如 lodash 使用 lodash-esbabel-plugin-lodash
  • 移除 Polyfill:现代浏览器环境下,不需要全部引入 core-js,可以使用 useBuiltIns: 'usage' 精确控制:
presets: [
  [
    '@babel/preset-env',
    {
      useBuiltIns: 'usage',
      corejs: 3,
    },
  ],
],

8. 使用 CDN

将常见的第三方库通过 CDN 加载,减少打包文件大小:

module.exports = {
  externals: {
    react: 'React',
    'react-dom': 'ReactDOM',
  },
};

HTML 模板中加载:

<script src="https://cdn.jsdelivr.net/npm/react@17/umd/react.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/react-dom@17/umd/react-dom.production.min.js"></script>

9. 减少 source-map 大小

在生产模式中使用轻量级的 source-map,例如:

module.exports = {
  devtool: 'source-map',
};

对于极端情况,可以完全禁用:

module.exports = {
  devtool: false,
};

10. 使用 Bundle 分析工具

通过工具识别构建中的冗余依赖或大文件:

  • Webpack Bundle Analyzer:bash复制代码
npm install webpack-bundle-analyzer --save-dev
const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');

module.exports = {
  plugins: [new BundleAnalyzerPlugin()],
};

以上方法可以根据实际项目需求灵活组合使用。每次优化后可以通过分析工具评估效果,确保在降低文件体积的同时不影响功能和性能。

发布者:myrgd,转载请注明出处:https://www.object-c.cn/5080

Like (0)
Previous 2024年12月3日 下午9:28
Next 2024年12月3日 下午9:48

相关推荐

  • 在微信服务号中,通过设置自动回复,可以在新用户关注时引导其进入小程序

    在微信服务号中,通过设置自动回复,可以在新用户关注时引导其进入小程序。以下是实现的方法和建议: 1. 使用文本自动回复引导在服务号后台设置关注自动回复,可以通过一段欢迎语并附带小程序链接,引导用户点击进入。示例文案: 小程序链接格式: 设置路径:进入 微信公众平台 > 自动回复 > 关注后自动回复,添加以上文案。 2. 使用卡片自动回复引导你可以直接在自动回…

    2024年12月3日
    00
  • 在进行 Java 单元测试时,遇到找不到类名的错误

    在进行 Java 单元测试时,遇到找不到类名的错误,通常是由于以下几个原因引起的。下面是一些常见问题及其解决方法:1. 类路径(Classpath)问题最常见的原因是编译后的类文件没有正确地包含在类路径中,或者类文件没有被正确加载到测试框架中。要解决这个问题,确保以下几点:解决方法:确认类是否存在:首先确保测试类和目标类都已经编译,并且在正确的目录中。检查 …

    2024年11月28日
    00
  • 加速你的开发体验给 Android Studio 配置国内镜像源

    在国内使用 Android Studio 开发时,由于网络限制,许多工具和依赖下载速度较慢,例如 SDK、Gradle 和第三方库等。为了加速开发过程,配置 国内镜像源 是一种有效的解决方案。下面是如何配置 Android Studio 使用国内镜像源加速开发体验的详细步骤。 1. 配置国内 Maven 镜像源 国内的 Maven 镜像源可以加速 Andro…

    2024年11月23日
    00
  • ubuntu服务器安装cuda11.0、cuDNN入门教程

    在 Ubuntu 服务器上安装 CUDA 11.0 和 cuDNN 的详细教程如下。本教程涵盖了从环境准备到安装和验证的完整流程,适用于初学者。 一、环境准备 1. 系统要求 2. 卸载旧版本(如有) 清理可能存在的旧版本 CUDA 和 NVIDIA 驱动: 二、安装 NVIDIA 驱动 1. 检查 GPU 支持情况 使用 lspci 或 nvidia-sm…

    2024年11月22日
    00
  • 解决 Vue 3 应用部署到 GitHub Pages 后,遇到 404 错误问题

    在将 Vue 3 应用部署到 GitHub Pages 后,遇到 404 错误通常是由于 GitHub Pages 处理路由时的问题。Vue 3 使用 Vue Router 来管理前端路由,而 GitHub Pages 本身是静态托管服务,不支持处理 SPA(单页面应用)的客户端路由。因此,当你直接访问某个页面 URL(比如 https://youruser…

    2024年11月29日
    00
  • Python安装与环境配置的详细讲解

    在本文中,我们将详细介绍 Python 的安装及环境配置过程。无论你是 Windows、macOS 还是 Linux 用户,都能根据本教程成功安装 Python 并配置开发环境。 1. 安装 Python(Windows、macOS、Linux) (1) Windows 安装 Python 或 安装 pip: 安装和配置虚拟环境(可选): 激活虚拟环境: (…

    2024年11月23日
    00
  • Jeewx-Api 1.3.1 发布:更简易的微信小程序开发 API 降低了开发成本

    Jeewx-Api 1.3.1 发布:更简易的微信小程序开发 API Jeewx-Api 是一款开源的微信开发 SDK,支持微信公众号、小程序、企业微信等全场景开发。1.3.1 版本针对小程序功能做了全面优化,为开发者提供了更简洁易用的 API,降低了开发成本。 1. 新版本亮点 支持微信小程序功能 更简洁的 API 支持企业微信与公众号 2. Jeewx-…

    2024年12月3日
    00
  • 远程访问 VMware ESXi 主机的方法

    远程访问 VMware ESXi 主机可以通过以下几种方式实现。具体方法取决于你的网络环境和目标需求,例如是否有公网 IP,是否需要加密传输等。以下是详细教程: 1. 基于公网 IP 的直接访问 1.1 适用场景 1.2 操作步骤 2. 使用 VPN 隧道访问 2.1 适用场景 2.2 操作步骤 3. 配置跳板机访问 3.1 适用场景 3.2 操作步骤 远程…

    2024年11月24日
    00
  • 在 MySQL 中 utf8mb4 和 utf8mb3 两种 UTF-8 编码的字符集主要区别

    在 MySQL 中,utf8mb4 和 utf8mb3 是两种 UTF-8 编码的字符集,它们的主要区别如下:1. 支持的字符范围不同utf8mb3:原来的 UTF-8 编码实现,支持最多 3 个字节的字符。无法存储超出基本多语言平面 (BMP) 的 Unicode 字符(U+10000 至 U+10FFFF),例如某些表情符号和特殊的语言字符。主要用于存储…

    2024年12月3日
    00
  • 在使用 PHP 抓取 HTTPS 资源时,会遇到一些常见问题

    在使用 PHP 抓取 HTTPS 资源时,可能会遇到一些常见问题。这些问题通常与 SSL 配置、证书验证或 PHP 设置相关。以下是常见问题及其解决方法的汇总: 1. SSL 证书验证失败问题描述当使用 file_get_contents、cURL 等方法访问 HTTPS 资源时,可能会遇到类似以下错误: 解决方法更新 cacert.pem 文件下载最新的根…

    2024年12月2日
    00
  • 在 Android 中 Matrix 实现图像的缩放和裁剪将 Glide 图像从 fitCenter 转换为 centerCrop

    在 Android 中,Matrix 可以用来实现图像的缩放和裁剪逻辑。要将 Glide 图像从 fitCenter 转换为 centerCrop,需要通过 Matrix 计算变换逻辑。以下是使用 Kotlin 实现的方法:实现步骤计算目标变换矩阵:根据目标宽高比,判断是否需要横向或纵向裁剪。设置 Matrix:使用 Matrix 执行缩放和平移操作。应用到…

    2024年12月3日
    00
  • 在使用 uni-app 开发小程序或移动端应用时 title image失效问题

    在使用 uni-app 开发小程序或移动端应用时,若发现 分享的标题(title) 和 图片(image) 配置无效,可能是由于配置错误、平台限制或代码逻辑问题。以下是排查和解决问题的详细指南: 1. 确保正确使用分享 API onShareAppMessage(自定义转发) 确保在 pages 的页面代码中正确使用了 onShareAppMessage 方…

    2024年11月25日
    00
  • 在 Vue3 和 uniapp 的 H5 环境中使用 QRCode.toDataURL() 生成二维码时无法显示的问题

    1. 图片格式或生成的 DataURL 处理问题QRCode.toDataURL() 方法通常会生成一个 Base64 编码的 PNG 图片。某些 Android 浏览器或 WebView 可能对 Base64 编码的图片支持不好,或者由于资源限制无法正常解析。解决方法:尝试通过生成二维码的图片 URL 直接展示而非使用 Base64 编码。可以通过将二维码…

    2024年11月27日
    00
  • 在 React Native 0.72.5 中使用 Hermes 引擎时JavaScript 的 Function.prototype.toString() 转成字符串

    在 React Native 0.72.5 中,使用 Hermes 引擎时,JavaScript 的 Function.prototype.toString() 方法的行为可能与其他 JavaScript 引擎(如 V8 或 JavaScriptCore)有所不同。这种差异源于 Hermes 的设计,旨在提升性能和减少内存开销。 问题描述 在 Hermes …

    2024年12月7日
    00
  • 使用 Python Selenium 控制 Chrome 浏览器 进行自动化操作

    使用 Python Selenium 控制 Chrome 浏览器 进行自动化操作是 Web 自动化测试和爬虫的常用方法之一。以下是一个完整的入门教程,包括如何安装、配置以及一些示例代码。 1. 安装所需环境 1.1 安装 Selenium 使用 pip 安装 Selenium: 1.2 下载 ChromeDriver 1.3 配置 ChromeDriver …

    2024年11月25日
    00

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

在线咨询: QQ交谈

邮件:723923060@qq.com

关注微信