六十天前端強化訓練之第三十一天之Webpack 基礎配置 大師級講解(接下來幾天給大家講講工具鏈與工程化)

=====歡迎來到編程星辰海的博客講解======

看完可以給一個免費的三連嗎,謝謝大佬!

目錄

一、Webpack 核心概念解析

二、實戰:多資源打包配置(含完整代碼)

三、配置深度解析(重點部分說明)

四、效果演示說明

五、核心學習要點

六、擴展學習圖譜

七、常見問題錦囊


一、Webpack 核心概念解析
  1. 本質認知
    Webpack 是模塊化思維的工程化解決方案,通過依賴圖譜分析將各類資源轉換為標準化模塊,是現代前端工程化的心臟。

  2. 四大核心支柱

  • Entry(入口):依賴關系的起點文件
  • Output(輸出):打包產物的存放規則
  • Loader(加載器):非JS資源的編譯器
  • Plugins(插件):打包周期的事件監聽器
  1. 工作流深度解析
    從入口文件開始建立依賴圖譜 → AST語法分析 → loader轉換 → chunk代碼分割 → 優化處理 → 輸出打包文件

二、實戰:多資源打包配置(含完整代碼)

(詳細注釋版配置示例)

JAVASCRIPT

// webpack.config.js
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');module.exports = {// 環境模式(development/production)mode: 'development', // 入口配置(支持多入口)entry: {main: './src/index.js',vendor: ['react', 'react-dom'] // 第三方庫分離},// 輸出配置output: {filename: '[name].[contenthash:8].bundle.js',path: path.resolve(__dirname, 'dist'),clean: true, // 自動清理舊文件assetModuleFilename: 'assets/[hash][ext][query]' // 靜態資源路徑規則},// 模塊處理規則module: {rules: [// JS處理(包含ES6+轉換){test: /\.jsx?$/,exclude: /node_modules/,use: {loader: 'babel-loader',options: {presets: ['@babel/preset-env', '@babel/preset-react']}}},// CSS處理(含模塊化方案){test: /\.(css|less)$/,use: [MiniCssExtractPlugin.loader,  // 提取CSS文件{loader: 'css-loader',options: {modules: { // CSS模塊化localIdentName: '[name]__[local]--[hash:base64:5]'}}},'postcss-loader', // 自動添加前綴'less-loader'     // LESS編譯]},// 圖片資源處理{test: /\.(png|jpe?g|gif|webp)$/,type: 'asset/resource',generator: {filename: 'images/[hash][ext]' // 自定義輸出路徑}},// 字體文件處理{test: /\.(woff2?|eot|ttf|otf)$/,type: 'asset/resource',generator: {filename: 'fonts/[hash][ext]'}},// CSV/TSV文件處理{test: /\.(csv|tsv)$/,use: ['csv-loader']}]},// 插件系統plugins: [// HTML模板插件new HtmlWebpackPlugin({template: './public/index.html',favicon: './public/favicon.ico'}),// CSS提取插件new MiniCssExtractPlugin({filename: 'css/[name].[contenthash:8].css'})],// 開發服務器配置devServer: {static: {directory: path.join(__dirname, 'public'),},compress: true,port: 9000,hot: true,open: true},// 優化策略optimization: {splitChunks: {chunks: 'all', // 代碼分割策略cacheGroups: {vendor: {test: /[\\/]node_modules[\\/]/,name: 'vendors',chunks: 'all'}}}}
};


三、配置深度解析(重點部分說明)
  1. 資源模塊類型

    • asset/resource:復制文件到輸出目錄
    • asset/inline:生成DataURL
    • asset/source:導出文件內容
    • asset:自動選擇模式(默認8kb臨界值)
  2. CSS模塊化方案
    通過css-loadermodules配置實現作用域隔離:

CSS

/* Button.module.css */
.primary {background: #1890ff;
}/* 編譯后生成唯一類名:Button_primary--ax7s9 */

  • 緩存策略設計
  • [contenthash]:根據文件內容生成哈希值
  • 第三方庫分離:通過splitChunks單獨打包

四、效果演示說明
  • 目錄結構示例

TEXT

dist/
├─ css/
│  └─ main.3d7f2a.css
├─ js/
│  ├─ main.b8d3e1.js
│  └─ vendors.9a2c7f.js
├─ images/
│  └─ 8sdf3a.jpg
├─ fonts/
│  └─ e9k2m3.woff2
└─ index.html

  • 瀏覽器加載效果

  • 正確加載樣式化組件
  • 圖片/字體資源正確顯示
  • 模塊化的CSS作用域隔離
  • 第三方庫單獨加載

五、核心學習要點
  • 配置哲學
  • 每個loader只做單一功能
  • 執行順序:從后往前(重要!)
  • 插件通過生命周期hook實現功能
  • 優化準則
  • 生產環境啟用TerserPlugin壓縮
  • 使用cache-loader加速構建
  • 合理設置exclude/include范圍
  • 調試技巧
  • webpack --stats detailed?查看構建詳情
  • source-map配置源碼映射
  • 使用webpack-bundle-analyzer分析體積

六、擴展學習圖譜
  • 官方文檔
  • Webpack概念圖解
  • Loader開發指南
  • 插件架構解析
  • 進階閱讀
  • 《Webpack性能優化十八式》(知乎專欄)
  • 《深入理解Webpack運行時機制》(掘金小冊)
  • 《Webpack Tree Shaking深度解析》(前端之巔)
  • 生態工具
  • webpack-dev-middleware:自定義開發服務器
  • speed-measure-webpack-plugin:構建速度分析
  • thread-loader:多進程編譯

七、常見問題錦囊

Q1: 如何處理SASS/SCSS文件?
A: 添加sass-loader并注意loader順序:

JAVASCRIPT

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

Q2: 如何兼容老舊瀏覽器?
A: 通過.browserslistrc文件配置:

TEXT

# 瀏覽器兼容要求
last 2 versions
> 1%
not dead

Q3: 如何優化構建速度?
A: 多維度策略:

  1. 縮小文件搜索范圍
  2. 使用cache-loader緩存
  3. 開啟多線程構建
  4. 合理配置externals

通過理論+實踐+優化的三維視角,構建了完整的Webpack知識體系,建議結合官方文檔進行實踐驗證,逐步掌握現代前端工程化的核心要義。

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

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

相關文章

機器學習——Bagging、隨機森林

相比于Boosting的集成學習框架,Bagging(Bootstrap Sampling,自助聚集法,又稱為自助采樣)作為一種自助聚集且并行化的集成學習方法,其通過組合多個基學習器的預測結果來提高模型的穩定性和泛化能力。其中隨機森林是Bagging學習框架…

【藍橋杯】每日練習 Day13

前言 今天做了不少題,但是感覺都太水了,深思熟慮之下主播決定拿出兩道相對不那么水的題來說一下(其實還是很水)。 兩道問題,一道是日期問題(模擬),一道是區間合并問題。 日期差值 …

HTML輸出流

HTML 輸出流 JavaScript 中**「直接寫入 HTML 輸出流」**的核心是通過 document.write() 方法向瀏覽器渲染過程中的數據流動態插入內容。以下是詳細解釋&#xff1a; 一、HTML 輸出流的概念 1. 動態渲染過程 HTML 文檔的加載是自上而下逐行解析的。當瀏覽器遇到 <script&…

理解文字識別:一文讀懂OCR商業化產品的算法邏輯

文字識別是一項“歷久彌新”的技術。早在上世紀初&#xff0c;工程師們就開始嘗試使用當時有限的硬件設備掃描并識別微縮膠片、紙張上的字符。隨著時代和技術的發展&#xff0c;人們在日常生活中使用的電子設備不斷更新換代&#xff0c;文字識別的需求成為一項必備的技術基礎&a…

開源模型應用落地-語音轉文本-whisper模型-AIGC應用探索(五)

一、前言 在上一節中&#xff0c;學習了如何使用vLLM來部署Whisper-large-v3-turbo模型。不過&#xff0c;在實際使用時&#xff0c;模型一次只能處理30秒的音頻。今天&#xff0c;將結合實際業務&#xff0c;介紹如何處理一段完整的音頻&#xff0c;并生成相應的字幕文件。 相…

“十五五”時期航空彈藥發展環境分析

1&#xff0e;“十五五”時期航空彈藥發展環境分析 &#xff08;標題&#xff1a;小二號宋體居中&#xff09; 一、建言背景介紹 &#xff08;一級標題&#xff1a;黑體三號&#xff0c;首行空兩格&#xff09; 航空彈藥作為現代戰爭的核心裝備&#xff0c;其發展水平直接關乎…

IDEA批量替換項目下所有文件中的特定內容

文章目錄 1. 問題引入2. 批量替換項目下所有文件中的特定內容2.1 右鍵項目的根目錄&#xff0c;點擊在文件中替換2.2 輸入要替換的內容 3. 解決替換一整行文本后出現空行的問題4. 增加篩選條件提高匹配的精確度 更多 IDEA 的使用技巧可以查看 IDEA 專欄&#xff1a; IDEA 1. 問…

藍橋杯 臨時抱佛腳 之 二分答案法與相關題目

二分答案法&#xff08;利用二分法查找區間的左右端點&#xff09; &#xff08;1&#xff09;估計 最終答案可能得范圍 是什么 &#xff08;2&#xff09;分析 問題的答案 和 給定條件 之間的單調性&#xff0c;大部分時候只需要用到 自然智慧 &#xff08;3&#xff09;建…

學習爬蟲的第二天——分頁爬取并存入表中

閱讀提示&#xff1a;我現在還在嘗試爬靜態頁面 一、分頁爬取模式 以豆瓣Top250為例&#xff1a; 基礎url:豆瓣電影 Top 250https://movie.douban.com/top250 分頁參數:?start0&#xff08;第一頁&#xff09;、?start25&#xff08;第二頁&#xff09;等 每頁顯示25條數…

第 8 章:使用更好的庫_《C++性能優化指南》_notes

使用更好的庫 第八章核心知識點解析編譯與測試建議總結優化原則重點內容&#xff1a;第一部分&#xff1a;多選題&#xff08;10題&#xff09;第二部分&#xff1a;設計題答案與解析多選題答案&#xff1a;設計題答案示例&#xff08;部分&#xff09;&#xff1a; 測試用例設…

RabbitMQ 學習整理1 - 基礎使用

項目代碼&#xff1a;RabbitMQDemo: 學習RabbitMQ的一些整理 基本概念 RabbitMQ是一種基于AMQP協議的消息隊列實現框架RabbitMQ可以用于在系統與系統之間或者微服務節點之間&#xff0c;進行消息緩存&#xff0c;消息廣播&#xff0c;消息分配以及限流消峰處理RabbitMQ-Serve…

React組件簡介

組件 在 React 中&#xff0c;組件&#xff08;Component&#xff09; 是 UI 的基本構建塊。可以把它理解為一個獨立的、可復用的 UI 單元&#xff0c;類似于函數&#xff0c;它接受輸入&#xff08;props&#xff09;&#xff0c;然后返回 React 元素來描述 UI。 組件的簡單…

Kafka消息序列化深度革命:構建高性能、高安全的自定義編碼體系

一、突破默認序列化的桎梏 1.1 原生序列化器的致命缺陷 Kafka默認提供的StringSerializer/ByteArraySerializer在復雜場景下暴露三大痛點&#xff1a; 類型安全黑洞&#xff1a;字節流缺乏元數據描述&#xff0c;消費端解析如履薄冰版本兼容困境&#xff1a;數據結構變更導致…

向量數據庫與傳統數據庫的差異

向量數據庫是一種專門設計用于高效存儲、管理和檢索**向量數據&#xff08;高維數值數組&#xff09;**的數據庫系統。它針對非結構化數據&#xff08;如圖像、文本、音頻&#xff09;的特征進行優化&#xff0c;通過將數據轉化為向量嵌入&#xff08;embeddings&#xff09;&a…

自動化框架的設計與實現

一、自動化測試框架 在大部分測試人員眼中只要沾上“框架”&#xff0c;就感覺非常神秘&#xff0c;非常遙遠。大家之所以覺得復雜&#xff0c;是因為落地運用起來很復雜&#xff1b;每個公司&#xff0c;每個業務及產品線的業務流程都不一樣&#xff0c;所以就導致了“自動化…

SpringBoot 3+ Lombok日志框架從logback改為Log4j2

r要將Spring Boot 3項目中的日志框架從Logback切換到Log4j2&#xff0c;并配置按日期滾動文件和控制臺輸出&#xff0c;請按照以下步驟操作&#xff1a; 步驟 1&#xff1a;排除Logback并添加Log4j2依賴 在pom.xml中修改依賴&#xff1a; <dependencies><!-- 排除默…

①、環境準備-主流技術(IPS/FW/主備-主主快速切換)

主流技術&(IPS/FW/主備-主主快速切換&#xff09; 一、RBM主備方案 RBM-FW-P 主配置內容介紹-注釋 remote-backup group 含義&#xff1a;定義了一個遠程備份組。這表明設備支持某種形式的遠程備份功能&#xff0c;用于在設備之間同步配置或數據。data-channel interface …

量化交通擁堵

指數&#xff1a; 基于嚴重擁堵里程比的指數和基于出行時間比的指數。 評價指標是飽和度&#xff08;VC比&#xff09;&#xff0c;它表示交通量與通行能力的比值。 飽和度可分為道路飽和度和路口飽和度。道路飽和度還會進一步分級&#xff0c;有四檔和六檔之分。 城市道路和…

PDF與Markdown的量子糾纏:一場由VLM導演的文檔界奇幻秀

緣起:當格式界的"泰坦尼克號"撞上"黑客帝國" 某個月黑風高的夜晚,在"二進制酒吧"的霓虹燈下: PDF(西裝革履地晃著威士忌): “我的每一頁都像瑞士手表般精密,連華爾街的禿鷲都為我傾倒!” Markdown(穿著帶洞的拖鞋): “得了吧老古董!…

【neo4j數據導出并在其他電腦導入】

停止服務 neo4j stop 導出 neo4j-admin database dump neo4j --to-path"C:\Users\12901\Downloads\test folder" 導入 將 .dump 文件放在一個目錄中 mkdir /root/dump-directory mv /root/neo4j.dump /root/dump-directory/ 使用包含 .dump 文件的目錄路徑作為 …