Webpack 中的 Loader 和 Plugin 全面詳解

🎯 Webpack 中的 Loader 和 Plugin 全面詳解

📌 整理不易,記得收藏、點贊再加關注,后續還會更新更多實戰文檔!

Webpack 是現代前端構建體系的核心工具,其中 LoaderPlugin 是其功能擴展的兩大支柱。它們雖然常一起出現,但本質和作用完全不同。

本文將全面對比二者的 定義、作用、使用場景、生命周期與示例,幫你徹底搞清 Loader 和 Plugin 的區別與使用方法。


📦 一、Loader 是什么?

🧠 定義:

Loader 用于 轉換模塊的源碼內容,本質上是一個函數,接收源文件并返回轉換后的結果。

🛠 主要作用:

  • 加載并處理 非 JavaScript 模塊,如 .vue.ts.scss.png
  • 實現模塊內容的預處理(編譯、壓縮、轉換等)

🔁 使用流程:

module.exports = {module: {rules: [{test: /\.ts$/,use: ['ts-loader'],},{test: /\.scss$/,use: ['style-loader', 'css-loader', 'sass-loader'],}]}
}

📌 多個 Loader 會從右到左(后向前)依次執行。

🧪 常見 Loader:

Loader功能說明
babel-loader將 ES6+ 轉為 ES5
ts-loader處理 TypeScript
vue-loader處理 .vue 文件
file-loader輸出文件并返回路徑
url-loader小圖轉 base64,大圖 file
css-loader加載 .css 文件
style-loader將 CSS 注入 <style> 標簽

🔌 二、Plugin 是什么?

🧠 定義:

Plugin 是一個具有 apply 方法的類,用于擴展 Webpack 的能力,可在構建的不同階段執行操作。

🛠 主要作用:

  • 執行更復雜的構建邏輯(如打包優化、資源注入、文件生成)
  • 可以訪問 Webpack 編譯生命周期的鉤子(如 emit、done、compile)

🧰 使用方式:

const HtmlWebpackPlugin = require('html-webpack-plugin')module.exports = {plugins: [new HtmlWebpackPlugin({title: '我的應用',template: './public/index.html'})]
}

🧪 常見 Plugin:

Plugin功能說明
HtmlWebpackPlugin生成 HTML 文件并自動注入資源
DefinePlugin定義環境變量
MiniCssExtractPlugin抽離 CSS 文件
CopyWebpackPlugin復制靜態資源
CleanWebpackPlugin構建前清除舊文件
BundleAnalyzerPlugin打包體積可視化分析

🔍 三、Loader vs Plugin 對比總結

對比項LoaderPlugin
本質函數(處理模塊源碼)類(處理構建生命周期)
作用時機模塊加載階段編譯/打包等各生命周期階段
功能轉換文件內容(如 .vue 轉 JS)添加功能(注入 HTML、壓縮、清理等)
應用方式module.rulesplugins 配置項中實例化
多次執行順序多個 Loader 從右到左依次執行Plugin 執行順序根據 Webpack 鉤子順序
能力范圍局限于模塊處理可以控制打包流程全局

?? 四、實戰示例對比

? 示例 1:Loader 示例(編譯 .scss

{test: /\.scss$/,use: ['style-loader', 'css-loader', 'sass-loader']
}

作用:

  • sass-loader 把 SCSS 轉為 CSS
  • css-loader 解析 @importurl()
  • style-loader 插入 HTML 中的 <style>

? 示例 2:Plugin 示例(生成 HTML 文件)

const HtmlWebpackPlugin = require('html-webpack-plugin')plugins: [new HtmlWebpackPlugin({title: '我的 App',template: './public/index.html'})
]

作用:

  • 自動將打包后的 JS/CSS 插入到 HTML 中
  • 支持模板變量和動態生成標題

? 五、總結一句話

  • Loader 是模塊的翻譯官:告訴 Webpack 如何處理某種類型的文件。
  • Plugin 是打包的魔法師:幫助 Webpack 構建過程中做“額外的事情”。

這兩者搭配使用,才能讓 Webpack 構建出強大、高效、靈活的現代前端項目!


? 整理不易,歡迎點贊 + 收藏 + 關注,一起搞定前端工程化的每一塊磚!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/89549.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/89549.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/89549.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

主流分布式中間件及其選型

分布式架構中的中間件技術 在互聯網公司的分布式架構中&#xff0c;中間件是支撐系統高可用、高并發、可擴展的核心組件。這些中間件針對分布式環境下的共性問題&#xff08;如通信、數據一致性、資源調度等&#xff09;提供標準化解決方案&#xff0c;極大降低了分布式系統的…

設備需求極致緊湊的空間體驗,我們該如何解決?

在自動化集成過程&#xff0c;往往會碰到設備對控制系統體積有極致要求的情況&#xff0c;面對這樣的挑戰&#xff0c;如何解決&#xff1f; 項目背景與需求分析 在自動化集成過程&#xff0c;往往會碰到設備對控制系統體積有極致要求的情況&#xff0c;面對這樣的挑戰&#x…

Kotlin擴展函數與屬性

擴展函數和屬性是Kotlin中最具特色的功能之一&#xff0c;它們允許我們在不修改原有類的情況下為類添加新功能。這種設計既保持了類的封裝性&#xff0c;又提供了強大的擴展能力。 一、擴展函數&#xff1a;為現有類添加新行為 1.1 基礎擴展函數 擴展函數允許我們為任何類&am…

廚師上門做飯小程序源碼php方案

廚師上門做飯小程序源碼&#xff0c;開發語言后端php&#xff0c;前端uniapp。可二開定制 三個端&#xff1a;用戶端師傅端小程序&#xff0c;pc管理后臺。 一 用戶端 1.單點大廚&#xff1a;選擇廚師預約下單&#xff0c;查看廚師評價、廚師的套餐。 2.點套餐&#xff1a;選擇…

LLM大模型如何訪問MySQL業務數據庫

目錄 一、LLM大模型如何訪問MySQL業務數據庫 1.1 為什么需要SQL Agent? 1.2 什么是 create_sql_agent&#xff1f; 1.3 什么是SQLDatabaseToolkit? 二、SQL Agent智能體操作MySQL數據庫 三、本地啟動服務 驗證效果 四、怎么提高SQL Agent智能體的回復準確性&#xff1…

MySQL(112)如何選擇讀寫分離策略?

選擇讀寫分離策略是實施讀寫分離的關鍵一步。常見的讀寫分離策略包括簡單的讀寫分離和基于負載均衡的讀寫分離。為了實現這些策略&#xff0c;我們需要動態地選擇數據源。下面詳細介紹如何實現基于Spring Boot的讀寫分離&#xff0c;并結合代碼示例展示不同策略的實現。 讀寫分…

日志-解決Linux因target is busy無法卸載硬盤/分區的問題 - PHP持續占用分區

效果圖 寫在前面 此次遇到的問題是&#xff0c;php-fpm持續占用設備/mnt/disk1&#xff0c;強制殺死php所有進程后&#xff0c;依然會自動產生新的進程再次霸占分區&#xff0c;導致設備無法卸載umount。思路是解決誰在不停的搗亂。 步驟 核心&#xff1a; 掛載文件系統到指定…

Linux系統權限維持篇

Openssh后門 重新安裝自定義的openssh&#xff0c;達到記錄賬戶密碼&#xff0c;也可以采用萬能密碼連接的功能 1、登錄方式 2、登錄軟件 3、登錄機制 環境準備 yum -y install openssl openssl-devel pam-devel zlib zlib-devel yum -y install gcc gcc-c makewget http://c…

spring中maven缺少包如何重新加載,報錯java: 程序包org.springframework.web.reactive.function不存在

錯誤原因分析 java: 程序包org.springframework.web.reactive.function不存在 這個錯誤是由于 項目中缺少 Spring WebFlux 相關依賴 導致的。org.springframework.web.reactive.function 包屬于 Spring WebFlux 模塊&#xff08;用于響應式 Web 開發&#xff09;&#xff0c;如…

Linux--線程池

目錄 Linux線程池 線程池的概念 線程池的優點 線程池的應用場景 線程池的實現 Linux線程池 線程池的概念 線程池是一種線程的使用模式。 其存在的主要原因就為&#xff1a;線程過多會帶來調度開銷&#xff0c;進而影響緩存局部性和整體性能。而線程池維護著多個線程&#…

mars3d (基于 Cesium 的輕量化三維地圖庫)

mars3d 是什么? Mars3D 作為基于 Cesium 的輕量化框架,正以其簡潔的 API 和強大的功能重新定義開發體驗。它不僅解決了原生 Cesium 學習曲線陡峭的問題,還通過封裝和優化實現了性能與易用性的雙重突破。無論是智慧城市、低空經濟還是軍事仿真,Mars3D 都能提供高效的三維可視…

uniapp 中使用路由導航守衛,進行登錄鑒權

前言: 在uniapp 使用中,對于登錄界面可能需要路由守衛進行方便判斷跳轉,以下有兩種方案,可以判斷用戶跳轉的時候是否是登錄狀態 方案一: 1. 可以使用插件 hh-router-guard 2. 使用 uni-simpe-route 方案二: 使用通過uni提供的攔截器實現, uni.addInterceptor 1.新建in…

Leetcode 262. 行程和用戶

1.題目基本信息 1.1.題目描述 表&#xff1a;Trips ----------------------- | Column Name | Type | ----------------------- | id | int | | client_id | int | | driver_id | int | | city_id | int | | status | enum | | request_at | varchar | -----------…

P1102 A-B 數對

P1102 A-B 數對 題目背景 出題是一件痛苦的事情! 相同的題目看多了也會有審美疲勞,于是我舍棄了大家所熟悉的 A+B Problem,改用 A-B 了哈哈! 題目描述 給出一串正整數數列以及一個正整數 C C C,要求計算出所有滿足 A ? B = C A - B = C A?B=C 的數對的個數(不同…

devextreme-vue的DxDataGrid如何顯示行號列

devextreme-vue我使用的是23.2版本&#xff0c;其DxDataGrid如何顯示行號列&#xff0c;官方一直沒有方案。 DataGrid - How to display a row number in data rows in Angular | DevExpress Support dxDataGrid - provide capability to display a column with row numbers …

【設計模式06】建造者模式

前言 沒什么用&#xff0c;類似于builder.build UML類圖 代碼示例 package com.sw.learn.pattern.B_create.e_builder;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();for …

datax-web報錯:連接數據庫失敗. 請檢查您的 賬號、密碼、數據庫名稱、IP、Port或者向 DBA 尋求幫助(注意網絡環境)

文章目錄 一、報錯內容二、解決方法 一、報錯內容 背景描述&#xff1a; 在linux安裝了datax202309版本及datax-web2.1.2版本&#xff0c;datax與datax-web默認都是mysql5.x版本的。我的數據庫是mysql8.x版本的。 在datax中執行json腳本從一個mysql導入mysql沒問題&#xff0…

C#調用C++導出的dll怎么調試進入C++ DLL源碼

第一步&#xff1a;首先需要打開C源碼&#xff0c;不需要任何設置&#xff0c;直接下斷點&#xff0c;然后將生成DLL目錄改成到C# exe生成目錄里面 第二步&#xff1a;打開winform項目&#xff0c;然后在C#項目屬性->啟用本地代碼調試勾選后即可 最后在C#下斷點F10或者F11…

Skyeye 云智能制造辦公系統 - Saas v3.16.10 發布

Skyeye 云智能制造&#xff0c;采用 Springboot (微服務) Layui UNI-APP Ant Design Vue 的低代碼平臺。包含 30 多個應用模塊、50 多種電子流程&#xff0c;CRM、PM、ERP、MES、ADM、EHR、筆記、知識庫、項目、門店、商城、財務、多班次考勤、薪資、招聘、云售后、論壇、公…

pdf 合并 python實現(已解決)

在Python中&#xff0c;可以使用多種庫來合并PDF文件&#xff0c;其中最常用的是PyPDF2和PyMuPDF&#xff08;又名fitz&#xff09;。下面我將分別介紹如何使用這兩個庫來合并PDF文件。 使用PyPDF2 首先&#xff0c;你需要安裝PyPDF2。可以使用pip來安裝&#xff1a; 先按照庫…