發布時間:2024-01-24閱讀(14)
我們來解讀一下 Webpack 的運行機制和核心工作原理。
其實 Webpack 官網首屏的英雄區就已經很清楚地描述了它的工作原理,如下圖所示:

我們以一個普通的前端項目為例,項目中一般都會散落著各種各樣的代碼及資源文件,如下圖所示:

比如 JS、CSS、圖片、字體等,這些文件在 Webpack 的思想中都屬于當前項目中的一個模塊。Webpack 可以通過打包,將它們最終聚集到一起。
Webpack 在整個打包的過程中:
具體來看打包的過程。
Webpack 啟動后,會根據我們的配置,找到項目中的某個指定文件(一般這個文件都會是一個 JS 文件)作為入口。
然后順著入口文件中的代碼,根據代碼中出現的 import(ES Modules)或者是 require(CommonJS)之類的語句,解析推斷出來這個文件所依賴的資源模塊。
接著再分別去解析每個資源模塊的依賴,周而復始,最后形成整個項目中所有用到的文件之間的依賴關系樹。下面這個動畫生動的演示了這個過程:

有了這個依賴關系樹過后,Webpack 會遍歷(遞歸)這個依賴樹,找到每個節點對應的資源文件。
然后根據配置選項中的 Loader 配置,交給對應的 Loader 去加載這個模塊。
最后將加載的結果放入 bundle.js(打包結果)中,從而實現整個項目的打包。
具體操作可以參考下面的動畫:

對于依賴模塊中無法通過 JavaScript 代碼表示的資源模塊,例如圖片或字體文件,一般的 Loader 會將它們單獨作為資源文件拷貝到輸出目錄中,然后將這個資源文件所對應的訪問路徑作為這個模塊的導出成員暴露給外部。
整個打包過程中,Loader 機制起了很重要的作用。因為如果沒有 Loader 的話,Webpack 就無法實現各種各樣類型的資源文件加載,那 Webpack 也就只能算是一個用來合并 JS 模塊代碼的工具了。
至此,你就已經了解到了 Webpack 的核心工作過程。
至于插件機制,只是 Webpack 為了提供一個強大的擴展能力,它為整個工作過程的每個環節都預制了一個鉤子,它并不會影響 Webpack 的核心工作過程,也就是說我們可以通過插件往 Webpack 工作過程的任意環節植入一些自定義的任務,從而擴展 Webpack 打包功能以外的能力。
歡迎分享轉載→http://www.avcorse.com/read-221835.html
Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號-5 TXT地圖HTML地圖XML地圖