理解 webpack 熱更新

一、開啓:HotModuleReplacementPlugin/--hot

二、webpack 編譯構建後,控制檯出現:

1、新的 hash 值 // 作爲下次熱更新的標識

2、新的 json 文件 // h 代表新 hash,c 代表要熱更新的模塊

3、新的 js 文件 // 本次修改後的代碼

三、熱更新實現原理:

1、啓動 webpack 生成 compiler 實例,compiler 上有很多方法,例如監聽本地文件的變化

2、使用 express 框架啓動本地 server,讓瀏覽器可以請求本地的靜態資源

3、啓動 websocket 服務,當本地文件發生變化,可以立即告知瀏覽器可以熱更新代碼

四、啓動本地服務前在入口增加兩個文件

1、獲取 websocket 客戶端代碼

2、根據配置獲取 webpack 熱更新代碼路徑

五、過程:

1、監聽 webpack 編譯結束,通過 websocket 給瀏覽器發送通知,ok 和 hash 事件,瀏覽器拿到最新的 hash 值做更新檢查邏輯

2、webpack-deb-server 主要職責:啓動服務和前置準備工作

3、webpack-dev-middleware 主要職責:本地文件的編譯和輸出以及監聽

4、瀏覽器接收到通知,hash 事件:更新最新一次打包後的 hash 值。ok 事件:進行熱更新檢查

5、利用上一次保存的 hash 值,發送 xxx/hash.hot-update.json 的 ajax 請求,獲取熱更新模塊

6、通過 jsonp 方式發送 xxx/hash.hot-update.js 請求,使用 jsonp 可以直接執行代碼,更新代碼,而不用刷新頁面更新。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/yRha4AesO4j0XTCE-_SZzA