国产aaaa级全身裸体精油片_337p人体粉嫩久久久红粉影视_一区中文字幕在线观看_国产亚洲精品一区二区_欧美裸体男粗大1609_午夜亚洲激情电影av_黄色小说入口_日本精品久久久久中文字幕_少妇思春三a级_亚洲视频自拍偷拍

首頁 > 行業(yè)資訊 > 小冊推薦|Webpack5 核心原理與應(yīng)用實踐

小冊推薦|Webpack5 核心原理與應(yīng)用實踐

時間:2022-09-20 來源: 瀏覽:

小冊推薦|Webpack5 核心原理與應(yīng)用實踐

范文杰 掘金小冊
掘金小冊

juejinxiaoce

掘金小冊,一個小篇幅、高濃度、成體系、有收益的技術(shù)學習平臺

收錄于合集
#webpack 2
#前端 10
#前端開發(fā) 10
#研發(fā)工程師 12

如果你是一名前端工程師,相信之前已經(jīng)或多或少聽過、用過  Webpack  這一構(gòu)建工具,它是一種用于構(gòu)建 JavaScript 應(yīng)用程序的靜態(tài)模塊打包器,能夠以一種相對一致且開放的處理方式,加載應(yīng)用中的所有資源文件(圖片、CSS、視頻、字體文件等),并將其合并打包成瀏覽器兼容的 Web 資源文件。

注意,上面說的 “一致且開放” 的加載模型,這在當時算的上是非常 Breaking Change 的設(shè)計!

早期的前端社區(qū)雖然已經(jīng)實現(xiàn)了許多模塊打包器,例如 Gulp、Grunt、RequireJS、Browserify、Closure Compiler 等,但它們或簡單合并執(zhí)行多種構(gòu)建任務(wù);或聚焦于模塊化方案的兼容處理;或僅僅實現(xiàn) JavaScript 層面的工程化(合并、壓縮、混淆)能力, 都缺乏一個能夠兼容處理所有資源、普適的抽象思維框架  —— 這意味著應(yīng)對不同資源,需要使用不同的特化處理邏輯,且不同類型文件之間無法信息互通。

而  Webpack 則忽略具體資源類型之間的差異 ,將所有代碼/非代碼文件都統(tǒng)一看作 Module —— 模塊對象,以相同的加載、解析、依賴管理、優(yōu)化、合并流程實現(xiàn)打包,并借助 Loader、Plugin 兩種開放接口將資源差異處理邏輯轉(zhuǎn)交由社區(qū)實現(xiàn),實現(xiàn)統(tǒng)一資源構(gòu)建模型,這種設(shè)計有很多優(yōu)點:

  • 所有資源都是 Module,所以可以用同一套代碼實現(xiàn)諸多特性,包括:代碼壓縮、Hot Module Replacement、緩存等;
  • 打包時,資源與資源之間非常容易實現(xiàn)信息互換,例如可以輕易在 HTML 插入 Base64 格式的圖片;
  • 借助 Loader,Webpack 幾乎可以用任意方式處理任意類型的資源,例如可以用 Less、Stylus、Sass 等預(yù)編譯 CSS 代碼。

甚至在 Webpack 之后出現(xiàn)的許多新打包工具,例如 Rollup、Parcel、Snowpack 等,都或多或少受這種設(shè)計影響。

而且, Webpack 極強的開放性,也讓它得以成為前端工程化環(huán)境的基座 ,我們可以圍繞 Webpack 輕易接入一系列工程化工具,例如 TypeScript、CoffeScript、Babel 一類的 JavaScript 編譯工具;或者 Less、Sass、Stylus、PostCSS 等 CSS 預(yù)處理器;或者 Jest、Karma 等測試框架,等等。

這些工具都不同程度上補充了 Webpack 不同方面的工程化能力,使得它能夠成為一個大一統(tǒng)的資源處理框架,滿足現(xiàn)代 Web 工程在效率、質(zhì)量、性能等方面的訴求,甚至能夠應(yīng)對小程序、微前端、SSR、SSG、桌面應(yīng)用程序、NPM 包等諸多應(yīng)用場景。

也因此,即使在當下百花齊放的 Web 工程化領(lǐng)域中, Webpack 依然是最為廣泛使用的構(gòu)建工具之一 。

目前,Webpack 已經(jīng)發(fā)布了最新的  5.73.0  版本,現(xiàn)如今的 Webpack 已經(jīng)非常非常成熟,在基礎(chǔ)構(gòu)建能力之外還提供了諸多錦上添花的工程化工具,包括:

  • 基于 Module Federation 的微前端方案;
  • 基于 webpack-dev-server 的 Hot Module Replacement ;
  • 基于 Terser、Tree-shaking、SplitChunks 等工具的 JavaScript 代碼壓縮、優(yōu)化、混淆方案;
  • 基于 lazyCompilation 的延遲編譯功能;
  • 有利于提升應(yīng)用性能的異步模塊加載能力;
  • 有利于提升構(gòu)建性能的持久化緩存能力;
  • 內(nèi)置 JavaScript、JSON、二進制資源解析、生成能力;
  • ……

陡峭的學習曲線

至今,Webpack 已經(jīng)發(fā)展的幾乎無所不能,但代價則是上手學習成本非常高,學習曲線非常陡峭!

這一方面是因為 Webpack 確實是一個極度復(fù)雜的構(gòu)建系統(tǒng),應(yīng)用層面、實現(xiàn)層面都有非常多不明覺厲的名詞、概念、邏輯模型。另一方面是缺少特別優(yōu)質(zhì)的學習資料,Webpack 官方雖然也提供了許多說明文檔,但基本上都停留在應(yīng)用層面;國內(nèi)外社區(qū)也有一些優(yōu)質(zhì)文章、視頻教程,但數(shù)量偏少,缺乏體系化與深度。

但是 Webpack 非常有必要學!

首先,正是因為 Webpack 很難,能靜得下心來深挖的人非常少,所以深入學習 Webpack ,不僅能幫助你更快解決具體的工程技術(shù)問題, 還能形成屬于你個人的,極具區(qū)分度的核心競爭力!

而且,同類工具或多或少都有借鑒 Webpack 之處,雖然具體實現(xiàn)差異很大,但解決工程化問題的思路基本一致,所謂一通百通,深入理解 Webpack 底層邏輯以及處理具體問題的方式方法后,上手其他同類工具也會非???。

其次, Vite 一類新一代 Unbundle 工具聚焦于解決特定場景問題,而 Webpack 則幾乎無所不能 ,功能覆蓋小程序、桌面應(yīng)用、微前端、WASM 等諸多場景,且它還在持續(xù)迭代發(fā)展。

根據(jù) State-of-JS 2021 的統(tǒng)計數(shù)據(jù), 2021年 Webpack 還保持高達 89% 的使用率,依然是絕對的大多數(shù)!

可見,Webpack 依然是一個值得長期投入學習,對個人、團隊都極具成長意義的技術(shù)方向。

如何高效學習 Webpack?

既然 Webpack 應(yīng)用范圍這么廣,學習價值這么高,為何社區(qū)相關(guān)的技術(shù)討論熱度卻一直不慍不火呢?

最主要的原因還是在于  Webpack 實在太復(fù)雜了 :上百種內(nèi)置配置項,7萬多行代碼,以及幾乎數(shù)不清的開源/閉源組件,涉及的知識點 多、雜、深 ,已經(jīng)不能僅僅停留在單一構(gòu)建工具層面,而是需要擴展開來學習一整套工程化思維與方法論。

我們需要 由淺入深、循序漸進,有章法有體系地學

1. 上手實踐各種場景下的構(gòu)建配置方法,捋清楚最基本的使用規(guī)則。

Webpack 始終是一個工具,無論你多了解它的組成結(jié)構(gòu),有多精深的理論知識,沒有經(jīng)過大量實戰(zhàn)應(yīng)用,你就始終還是停留在門外漢水平。

Webpack 雖然內(nèi)置了上百種配置項,如 devtool、module、resolve ,各種場景下特化的資源處理需求、數(shù)千種 Loader、Plugin 組件的使用,等等,看起來比較復(fù)雜, 但其實它們的背后都隱含一套晦澀但自洽的工程邏輯 。

學習這部分的重點是 通過各種應(yīng)用場景摸清使用規(guī)律,結(jié)構(gòu)化地理解各基礎(chǔ)配置項與常見組件的用法。

2. 初步理解底層構(gòu)建流程,學會分析性能卡點并據(jù)此做出正確性能優(yōu)化。

只會用還不行,你還得學會怎么用好,怎么用盡可能少的時間構(gòu)建出性能足夠好的應(yīng)用。

這部分涉及內(nèi)容比較廣,縱向可以深挖到操作系統(tǒng)、計算機網(wǎng)絡(luò)原理等,橫向可以擴展到 ECMAScript 規(guī)范、多媒體資源編解碼等,關(guān)鍵在于 掌握分析方法,理解底層機制,做到融會貫通,舉一反三。

3. 深入 Webpack 擴展規(guī)則,理解 Loader 與 Plugin 能做什么,怎么做。

實際上, Webpack 主體只是實現(xiàn)了最核心的構(gòu)建工具流與 Loader、Plugin 架構(gòu) ,大部分具體功能都是通過具體插件與 Loader 實現(xiàn)的。

所以,學習這兩種擴展組件的開發(fā)方法,進而理解兩者能做什么、怎么做等,一是能幫助我們更深層次理解 Webpack 的構(gòu)建過程;二是在遇到疑難雜癥時能幫助我們迅速定位問題位置;三是必要時可以自己上手實現(xiàn)一些定制需求。

4. 深挖源碼,理解 Webpack 底層工作原理,加強應(yīng)用與擴展能力。

經(jīng)過上面三個步驟,相信你已經(jīng)成為一個非常成熟的 Webpack 使用者,但知其然還需知其所以然,接下來我們還是得深入 Webpack 源碼,學習從啟動構(gòu)建,到遞歸編譯模塊代碼,到封裝打包,再到代碼優(yōu)化最終輸出資產(chǎn)文件整個過程。

只有理解了這個過程,我們才算是真正吃透 Webpack 應(yīng)用到原理整個知識體系,才能更深入理解各個配置項到底作用在哪些位置;哪些步驟容易造成性能卡點,我們要怎么優(yōu)化;各個 Hook 到底在什么時間點,怎么觸發(fā)等等。

小冊介紹

基于這樣的學習路徑,小冊也將沿著上述 四個方向 展開介紹 Webpack,核心部分主要是四大模塊:

  • 基礎(chǔ)用法 :以更結(jié)構(gòu)化方式介紹 Webpack 及常用組件的用法,并結(jié)合具體應(yīng)用場景(如 WASM、NPM 庫、微前端等),講解各自特有的構(gòu)建需求與相關(guān)實現(xiàn);
  • 性能優(yōu)化 :講解如何衡量 Webpack 構(gòu)建性能,進而介紹各項常見的構(gòu)建、產(chǎn)物性能優(yōu)化手段,及其背后的實現(xiàn)原理;
  • 自定義組件 :講解 Webpack Loader、Plugin 的作用與基本形態(tài),以及許多具體的開發(fā)技巧與輔助工具;
  • 核心原理 :講解 Webpack 5.0 的核心原理,包括:構(gòu)建從啟動到結(jié)束的運行過程、Chunk 分包規(guī)則及實現(xiàn)原理、Loader/Plugin 與 Webpack 核心架構(gòu)、模塊轉(zhuǎn)譯與打包原理、Tree-Shaking 原理,等等。

總之,這本小冊會從最基礎(chǔ)的用法開始,逐步遞進、深入挖掘 Webpack 最底層的實現(xiàn),必定能幫助大家構(gòu)建起更成熟、體系化的 Webpack 知識體系!

趕緊戳鏈接學習吧「 Webpack5 核心原理與應(yīng)用實踐 」

版權(quán):如無特殊注明,文章轉(zhuǎn)載自網(wǎng)絡(luò),侵權(quán)請聯(lián)系cnmhg168#163.com刪除!文件均為網(wǎng)友上傳,僅供研究和學習使用,務(wù)必24小時內(nèi)刪除。
相關(guān)推薦