webpack熱更新原理

來源:魅力女性吧 1.03W
webpack熱更新原理

熱更新(Hot Module Replacement,簡稱HMR)是指在無需重新載入整個頁面,只更新頁面的局部完成更新。HMR是webpack的內置功能,可以透過HotModuleReplacementPlugin或--hot開啓。

webpack熱更新基本原理:

1、修改的entry配置

在啓動webpack的本地服務之前,調用了updateCompiler(iler)方法,該方法修改了的entry配置:在entry中新增兩個js檔案,這意味着這兩個js檔案會在打包時隨着入口檔案一起打包爲。

一個是webpack-dev-server/client/,負責與本地服務建立webSocket通信。另一個是webpack/hot/,負責瀏覽器在收到本地服務消息後進行熱更新檢查及更新操作。因爲這兩個操作都需要在瀏覽器端完成,所以需要隨入口檔案一起打包,這樣就能在瀏覽器的環境中執行了。

2、啓動本地服務

簡單來說就是

webpack依賴express啓動了一個本地服務器,可以訪問本地靜態資源。

生成了compiler對象,可以對本地檔案的修改進行監聽

啓動本地服務後,可以透過webSocket與瀏覽器端進行通信

3、監聽檔案發生變化

在setupDevMiddleware中監聽了本地檔案的變化,當檔案發生變化時重新進行編譯。然後執行setFs方法,將編譯後的檔案打包內存。

4、監聽webpack編譯完成

當一次webpack編譯結束,就會調用_sendStats方法透過websocket給瀏覽器發送通知,ok和hash事件,這樣瀏覽器就可以拿到最新的hash值了,做檢查更新邏輯。

5、瀏覽器收到檢查更新通知

瀏覽器收到ok和hash事件,開始檢查更新。

hash事件:更新最新一次打包的值

ok事件:進行更新檢查

6、HotModuleReplacementPlugin進行更新

在此之前,一直是webpack-dev-server所做的事情,接下來更新這裏是HotModuleReplacementPlugin負責。HotModuleReplacementPlugin裏面的k方法,發送請求,獲取上一次的hash值,在使用hotApply(這裏省略一些步驟…)刪除掉舊的模組,添加新的模組。

熱門標籤