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
英文地址,請注明出處:http://en.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??在科技日新月異的當下,直播行業正經歷著一場深刻變革,數字人直播的興起,宛如一顆璀璨新星,照亮了直播領域的新征程。數字人直播,是利用先進的人工智能技術&…