使用 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

相关推荐

  • uni-app 中的一个 API,uni.getLocation用于获取用户的地理位置信息

    uni.getLocation 是 uni-app 中的一个 API,用于获取用户的地理位置信息。它可以通过 GPS 或网络方式获取当前位置,并提供包括经纬度、速度、精度等信息。这个 API 在移动端(如安卓、iOS)和 H5 平台上均可使用。基本语法 参数说明type(可选):指定位置的坐标类型。支持 ‘wgs84’ 和 ‘gcj02’,默认值为 ‘wgs…

    2024年11月28日
    00
  • 通过 PHP 读取微软邮箱(Outlook/Office 365 邮箱)

    通过 PHP 读取微软邮箱(Outlook/Office 365 邮箱)邮件,通常需要使用 Microsoft Graph API,因为微软逐步淘汰了基于用户名和密码的 IMAP/SMTP 方式。Microsoft Graph API 支持 OAuth2.0 认证,可以安全地访问和管理用户邮件。 以下是实现读取微软邮箱邮件的完整示例。 实现步骤 1. 准备工…

    2024年11月25日
    00
  • wordpress 蜘蛛记录插件的功能记录网站的所有访问记录

    要在 WordPress 网站上实现类似的功能,通常你需要开发一个 WordPress 插件。以下是一步步创建一个插件的指南,它可以记录访问者的访问记录,区分搜索引擎蜘蛛,并保存访客的 IP 地址。 1. 创建插件目录和文件 2. 插件文件结构 插件的文件结构大概如下: 3. 编写插件代码 在 visitor-tracker.php 文件中,添加以下代码: …

    2024年11月22日
    00
  • Android Studio 2024 版本安装 SDK、Gradle环境配置

    在 Android Studio 2024 中,配置 SDK 和 Gradle 环境是非常重要的步骤,确保开发环境能正确运行、编译和构建你的 Android 项目。以下是详细的安装和配置步骤。 1. 安装 Android Studio 2024 首先,你需要安装 Android Studio 2024。你可以从 Android Studio 官网 下载最新版…

    2024年11月23日
    00
  • 在 MySQL 中 ORDER BY和HAVING用于数据查询和处理

    在 MySQL 中,ORDER BY和HAVING是用于数据查询和处理的两个重要子句,通常与SELECT语句一起使用,以下是它们的具体使用方法: ORDER BY子句 其中,column1、column2等是要排序的列名。ASC表示升序排序(默认),DESC表示降序排序。 多列排序示例:如果要先按照部门编号升序排序,再按照工资降序排序,可以这样写: 按表达式…

    2024年12月15日
    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
  • 微信小程序开发中使用 Tailwind CSS 提高开发效率和代码的可维护性

    Tailwind CSS 是一个利用原子化 CSS 类来构建用户界面的框架,在微信小程序开发中使用 Tailwind CSS 可以提高开发效率和代码的可维护性。以下是在微信小程序中使用 Tailwind CSS 进行原子 CSS 开发的具体步骤: 安装 Tailwind CSS 配置 Tailwind CSS 引入样式:在微信小程序的全局样式文件app.wx…

    2024年12月15日
    00
  • 博客网站的链接添加nofollow的好处

    在博客中为链接添加 nofollow 属性可以在以下几个方面带来好处: 1. 防止权重流失作用:为外部链接添加 nofollow 标签可以阻止搜索引擎将页面权重(PageRank)传递给目标页面,从而保留网站自身的 SEO 权重。适用场景:指向不可靠或低质量内容的链接。赞助商链接或付费推广链接。 2. 避免搜索引擎惩罚作用:搜索引擎(如 Google)要求对…

    2024年11月28日
    00
  • 2024年最新的 Node.js 安装与环境配置教程

    以下是2024年最新的 Node.js 安装与环境配置教程,适用于 Windows、macOS 和 Linux 系统。 一、什么是 Node.js? Node.js 是一个基于 V8 引擎的 JavaScript 运行环境,主要用于开发服务端应用程序。它的特点是异步事件驱动和非阻塞 I/O,适合高性能应用。 二、Node.js 安装 1. 下载 Node.j…

    2024年11月23日
    00
  • 在 Debian 8 上设置 Apache 虚拟主机步骤操作

    在 Debian 8 上设置 Apache 虚拟主机需要按照以下步骤操作。这可以让您为不同的域名或子域名配置独立的网站目录和设置。 步骤 1:安装 Apache确保 Apache 已安装。如果没有安装,可以运行以下命令: 步骤 2:创建虚拟主机的目录结构为每个虚拟主机创建单独的目录,例如: 为测试,在每个目录下创建一个 index.html 文件: 设置目录…

    2024年12月2日
    00
  • Docker 部署 Navidrome 服务器与远程访问听歌的教程

    Navidrome 是一个轻量级、功能强大的音乐流媒体服务器,可以通过 Docker 容器方便地部署。本教程涵盖从本地部署到远程访问的详细步骤。 一、环境准备 1. 安装 Docker 和 Docker Compose 在服务器(或本地机器)上安装 Docker 和 Docker Compose。 安装 Docker Ubuntu 示例: CentOS 示例…

    2024年11月22日
    00
  • 在开发 Angular 项目时,使用 RangeSlider 控件时的常见问题

    在开发 Angular 项目时,使用 RangeSlider 控件时,可能会遇到一些常见的问题。以下是一些问题及其解决方案:1. 滑块值不更新问题描述:当用户拖动滑块时,滑块的值不会实时更新,或者显示的值不正确。解决方案:确保绑定的模型是双向绑定,使用 ngModel 或者监听 input 事件来确保滑块值能实时更新。例如: 确保你已经导入了 FormsMo…

    2024年11月27日
    00
  • 在 Ubuntu 16.04 上使用 GitLab CI 设置持续集成 (CI) 流水线步骤

    在 Ubuntu 16.04 上使用 GitLab CI 设置持续集成 (CI) 流水线需要完成以下步骤。GitLab CI/CD 是一个强大的工具,可以自动化代码测试、构建和部署。 步骤 1:安装 GitLab RunnerGitLab Runner 是用于执行 GitLab CI 流水线任务的工具。安装必要的软件包 添加 GitLab Runner 的官…

    操作系统 2024年12月2日
    00
  • 多方面的优化包括启动时间、React Native 速度提升 550% 运行时性能以及渲染效率的提升

    React Native 速度提升 550% 可能涉及多方面的优化,包括启动时间、运行时性能以及渲染效率的提升。这通常是通过框架改进、代码优化和工程实践的结合来实现的。以下是实现 React Native 性能大幅提升的一些关键方法和策略: 1. 启动时间优化 1.1 减少 JS Bundle 大小 1.2 预加载资源 1.3 使用优化的原生模块 2. 渲染…

    2024年12月7日
    00

发表回复

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

联系我们

在线咨询: QQ交谈

邮件:723923060@qq.com

关注微信