網站首頁 美容小常識 享受生活 東方時尚 識真假 高奢 資訊 遊戲攻略 搞笑段子
當前位置:品位站 > 享受生活 > 心理

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(這裏省略一些步驟…)刪除掉舊的模塊,添加新的模塊。

Tags:webpack