Webpack 项目构建优化详解

1. 相关面试题 

1.1. 做过哪些Webpack打包构建优化?

  • 代码分割:使用 Webpack 的 SplitChunksPlugin 进行代码分割,将第三方库、公共代码与业务代码分离,提高缓存利用率和加载速度。

  • Tree Shaking:通过配置 mode: 'production' 或使用 TerserPlugin,移除未引用的代码,减少包体积。

  • Lazy Loading:使用 import() 动态加载模块,实现按需加载,减少初始加载时间。

  • 使用 CDN:配置 externals,将常用的库如 React、Vue 等通过 CDN 引入,减少打包体积。

  • 缓存优化:通过配置 output.filename 和 output.chunkFilename 中的 [contenthash],生成基于文件内容的哈希值,避免不必要的缓存失效。

  • 开启持久化缓存:配置 cache: { type: 'filesystem' },提高二次构建速度。

  • 优化 Loader:使用多进程和缓存,提升构建速度。还可以通过限制 babel-loader 等处理范围来加速构建。

  • 优化开发体验:使用 webpack-dev-server 的 热模块替换功能,提高开发效率;或者通过配置 resolve.alias 缩短模块查找路径。

2. 开发构建优化详解

2.1. 开发模式配置

2.1.1. 使用开发模式

在开发环境中,配置 mode: 'development' 可以启用 Webpack 的内置优化,比如更快的构建速度和未压缩的输出代码,这有助于开发调试。

module.exports = {mode: 'development',// 其他配置...
};

2.1.2. 配置合理的源码镜像

devtool 配置项控制是否生成 source map 以及生成哪种类型的 source map。eval-cheap-module-source-map 是开发模式下的推荐配置,它在构建速度和调试体验之间取得了良好的平衡。

module.exports = {mode: 'development',devtool: 'eval-cheap-module-source-map',// 其他配置...
};

2.1.3. 启用 HMR

HMR 允许在不刷新整个页面的情况下替换、添加或删除模块。通过 webpack-dev-server 的 hot: true 配置,可以轻松启用 HMR。

const webpack = require('webpack');
const WebpackDevServer = require('webpack-dev-server');module.exports = {mode: 'development',devtool: 'eval-cheap-module-source-map',devServer: {contentBase: './dist',hot: true,},plugins: [new webpack.HotModuleReplacementPlugin(),],// 其他配置...
};

2.2. 模块解析优化

2.2.1. 使用解析别名

通过为常用模块设置路径别名,可以减少解析路径的时间,从而加快构建速度。

module.exports = {mode: 'development',resolve: {alias: {'@components': path.resolve(__dirname, 'src/components/'),'@utils': path.resolve(__dirname, 'src/utils/'),},},// 其他配置...
};

2.2.2. 优化模块路径解析

通过明确 resolve.extensions 中包含的文件扩展名,可以减少 Webpack 在解析模块时的尝试次数,优化构建性能。

module.exports = {mode: 'development',resolve: {extensions: ['.js', '.jsx', '.json'], // 只包含需要解析的扩展名},// 其他配置...
};

2.2.3. 明确模块路径

通过配置 resolve.modules 明确模块路径,可以避免递归查找,加速模块解析。

module.exports = {mode: 'development',resolve: {modules: [path.resolve(__dirname, 'src'), 'node_modules'],},// 其他配置...
};

2.3. 缓存优化

2.3.1. 启用文件系统缓存

Webpack 5 引入了文件系统缓存机制,通过启用 cache: { type: 'filesystem' } 可以显著减少二次构建时间。

module.exports = {mode: 'development',cac

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/91735.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/91735.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【深度学习基础】张量与Tensor的区别?从标量到深度学习的多维世界

目录引言一、张量(Tensor)的定义与特性1. 数学中的张量2. 深度学习中的Tensor二、标量(Scalar)是什么?三、深度学习中的其他核心量1. 向量(Vector)2. 矩阵(Matrix)3. 高阶…

设计模式一: 模板方法模式 (Template Method Pattern)

模板方法模式是一种行为设计模式,它通过定义一个算法的骨架,而将一些步骤延迟到子类中实现。Template Method 使得子类可以不改变(复用)一个算法结构 即可重定义(override 重写)该算法的某些特定步骤。基本…

Linux驱动学习day24(UART子系统)

一、UART硬件理论1.1 作用及功能UART:通用异步收发传输器,简称串口。功能:移植u-boot、内核时,主要使用串口查看打印信息。外接各种模块,比如蓝牙GPS模块。使用UART的时候,要注意1. 波特率 2. 格式&#xf…

NFS共享服务器

目录 任务要求 思路总结 1.NFS共享服务 服务端 (ip 192.168.48.128) 客户端 (ip 192.168.48.130) 2.配置autofs自动挂载 任务要求 1.NFS服务器,可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中看来,那个远程主机的目…

FreeRTOS学习笔记之队列

小编正在学习嵌入式软件,目前建立了一个交流群,可以留下你的评论,我拉你进群一、简介队列是为了任务与任务、任务与中断之间的通信而准备的,可以在任务与任务、任务与中断之间消息传递,队列中可以存储有限的、大小固定…

垃圾收集器-ZGC

前言在Java开发中,垃圾收集器的选择对系统性能有着致命的影响。Java 8后,虽然G1 GC成为默认,但是它在延迟性控制上仍有限。ZGC作为最新一代高性能低延迟垃圾收集器,解决了CMS和G1在延迟、垃圾堆容量和吞吐量方面的重大突破。本文将…

计算机“十万个为什么”之跨域

计算机“十万个为什么”之跨域 本文是计算机“十万个为什么”系列的第五篇,主要是介绍跨域的相关知识。 作者:无限大 推荐阅读时间:10 分钟 一、引言:为什么会有跨域这个“拦路虎”? 想象你正在参观一座戒备森严的城堡…

C语言:20250719笔记

字符数组在C语言中,支持字符串常量,不支持字符串变量。如果想要实现类似的字符串变量,C语言提供了两种实现方式:字符数组:char name[] “哪吒”;字符指针:char *name "娜吒"&#x…

decltype是什么,什么作用?

基本概念decltype 是 C11 引入的关键字,用于推导表达式的类型,且会完整保留类型的细节(包括 const、引用 &、指针 * 等)。语法:decltype(表达式) 变量名核心特点1.推导依据是表达式本身,而非表达式的结果&#xff…

RPC 与 Feign 的区别笔记

一、基本概念 1.1 RPC(Remote Procedure Call) 定义:远程过程调用,允许像调用本地方法一样调用远程服务的方法。 本质:跨进程通信,隐藏了底层网络通信的复杂性。 常见实现: Java 原生 RMIDub…

高防IP能够防御CC攻击吗?它具备哪些显著优势?

摘要: 面对日益复杂的网络攻击,高防IP作为重要的安全工具,不仅能防御常见的DDoS攻击,还能有效应对CC攻击。本文将解析高防IP防御CC攻击的原理及其核心优势,帮助读者了解其在网络安全中的关键作用。一、高防IP能否防御C…

TypeScript 类型注解(一)

一、TypeScript 类型注解1、什么是TpyeScript类型注解- 是否还记得TypeScript的两个重要特性?- 类型系统、适用于任何规模- 可以说,TS的类型系统是TS最重要的功能;那么什么是类型注解呢?其实就是在声明变量时,将变量的…

弗兰肯斯坦式的人工智能与GTM策略的崩溃

2025 年上半年已经明确了一件事:B2B 市场营销团队被工具淹没,但缺乏策略。人工智能无处不在。收入领导者在进行无休止的试点。营销团队拼凑各种点解决方案,希望能实现规模扩张。然而,销售线索的增长停滞不前。信誉正在受损。曾经承…

NAND闪存(NAND Flash)是什么?

NAND闪存(NAND Flash)是什么? NAND闪存(NAND Flash)详解 NAND闪存是一种非易失性存储介质(断电不丢失数据),广泛应用于SSD、U盘、手机存储等设备中。NAND Flash 的全称是 “Negative-AND Flash”(与非型闪存),其名称源自其底层存储单元的电路结构——基于**“与非门…

Android性能优化之UI渲染优化

一、UI渲染核心瓶颈深度解析 1. 渲染管线关键阶段阶段CPU工作GPU工作潜在卡顿点Measure计算View尺寸-嵌套布局多次测量Layout计算View位置-频繁重排(Relayout)Draw构建DisplayList指令集-复杂自定义View.onDraw()Sync & Upload资源上传到GPU内存纹理上传大图/未压缩资源Ras…

基于Spring AI Alibaba的智能知识助手系统:从零到一的RAG实战开发

📖 项目概述 在人工智能快速发展的今天,RAG(Retrieval-Augmented Generation)技术已成为构建智能问答系统的核心技术。本文将详细介绍一个基于Spring AI Alibaba DashScope深度集成的智能知识助手系统的完整开发过程,…

VirtualBox + CentOS:启用 DHCP 获取 IPv4 地址

标题: VirtualBox CentOS:启用 DHCP 获取 IPv4 地址 日期: 2025-07-18 一、问题现象 最小化安装的 CentOS 7 虚拟机里敲: ip addr输出只有 lo 的 127.0.0.1 以及 enp0s3 的 IPv6 链路本地地址,没有 IPv4&#xff0…

Git

Git简介Git 是一个分布式版本控制工具,通常用来对软件开发过程中的源代码文件进行管理。通过Git 仓库来存储和管理这些文件,Git 仓库分为两种:本地仓库:开发人员自己电脑上的 Git仓库。远程仓库:远程服务器上的 Git 仓库。commit: 提交, 将本地文件和版本…

通信算法之294:LTE系统中的整数倍频偏估计

在LTE系统中,整数倍频偏估计主要通过以下方法实现:一、最大似然估计法(ML)通过遍历预设的整数倍频偏范围(如30kHz),将接收信号与本地的PSS序列在不同频偏点上进行相关运算,选择相关峰…

数字人直播:开启直播行业新纪元​

​原始尺寸更换图片p9-flow-imagex-sign.byteimg.com​​在科技日新月异的当下,直播行业正经历着一场深刻变革,数字人直播的兴起,宛如一颗璀璨新星,照亮了直播领域的新征程。数字人直播,是利用先进的人工智能技术&…