網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
Webpack 的熱更新(Hot Module Replacement,簡(jiǎn)稱HMR)是一種開發(fā)時(shí)提供實(shí)時(shí)更新的功能,它使得在修改代碼后,不需要完全刷新頁(yè)面就能立即看到更新的效果。
HMR 的原理涉及以下幾個(gè)主要步驟:
- 啟動(dòng)時(shí)建立 WebSocket 連接:在項(xiàng)目啟動(dòng)時(shí),Webpack 會(huì)創(chuàng)建與開發(fā)服務(wù)器的WebSocket連接,用于在構(gòu)建完成后接收更新的模塊。
- 構(gòu)建編譯階段:Webpack 在編譯時(shí)會(huì)在每個(gè)模塊中注入 HMR 運(yùn)行時(shí)代碼。該代碼會(huì)監(jiān)聽源代碼的變化,并通知 HMR runtime 進(jìn)行處理。
- 文件監(jiān)控:Webpack 會(huì)監(jiān)控所有入口文件及其依賴的文件,一旦檢測(cè)到文件發(fā)生變化,會(huì)觸發(fā)重新編譯。
- 構(gòu)建完成:當(dāng)編譯完成后,Webpack 會(huì)將編譯結(jié)果發(fā)送給開發(fā)服務(wù)器,并通過 WebSocket 通知客戶端有新的資源可用。
- 模塊更新:在客戶端收到更新通知后,HMR runtime 會(huì)與服務(wù)器建立一條新的短連接,并請(qǐng)求更新的模塊信息。
- 應(yīng)用更新:服務(wù)器端收到模塊請(qǐng)求后,會(huì)以增量更新的方式構(gòu)建新的模塊,并通過短連接發(fā)送給客戶端。
- 模塊替換:在客戶端收到新的模塊后,HMR runtime 會(huì)根據(jù)更新策略決定如何替換舊的模塊。一般情況下,它會(huì)嘗試保留應(yīng)用的狀態(tài),例如保留表單數(shù)據(jù)、滾動(dòng)位置等。
以上就是Webpack HMR 的主要原理。通過將更新的模塊以增量的方式發(fā)送給客戶端,Webpack 可以在不刷新整個(gè)頁(yè)面的情況下,實(shí)時(shí)地更新應(yīng)用程序,提高開發(fā)效率。
具體使用
要在Webpack中啟用熱更新,你需要進(jìn)行以下配置和代碼解釋:
- 添加webpack-hot-middleware插件:首先,安裝
webpack-hot-middleware
插件,它是Webpack的一個(gè)擴(kuò)展,用于實(shí)現(xiàn)熱更新功能。
npm install --save-dev webpack-hot-middleware
- 配置Webpack:在你的Webpack配置文件中,添加以下配置項(xiàng)。
const webpack = require('webpack');
module.exports = {
// ...其他配置項(xiàng)
entry: [
'webpack-hot-middleware/client', // 添加該入口文件
'./src/index.js' // 你的入口文件
],
plugins: [
new webpack.HotModuleReplacementPlugin(), // 添加該插件
// ...其他插件
],
// ...其他配置項(xiàng)
};
上述配置中的webpack-hot-middleware/client
入口文件和new webpack.HotModuleReplacementPlugin()
插件是熱更新所必需的。
- 服務(wù)器端配置:在你的服務(wù)器端代碼中,添加以下代碼以啟用Webpack的熱更新中間件。
const webpack = require('webpack');
const webpackDevMiddleware = require('webpack-dev-middleware');
const webpackHotMiddleware = require('webpack-hot-middleware');
const config = require('./webpack.config'); // 你的Webpack配置文件路徑
const compiler = webpack(config);
app.use(
webpackDevMiddleware(compiler, {
publicPath: config.output.publicPath
})
);
app.use(webpackHotMiddleware(compiler));
上述代碼中,webpackDevMiddleware
用于將Webpack編譯結(jié)果傳遞給服務(wù)器,并提供熱更新所需的相關(guān)文件。而webpackHotMiddleware
則用于配置客戶端的熱更新處理。
- 客戶端代碼:在你的客戶端代碼中,你無(wú)需做任何修改,因?yàn)闊岣鹿δ軙?huì)自動(dòng)注入到你的應(yīng)用程序中。
這樣配置完成后,當(dāng)你修改源代碼時(shí),Webpack將會(huì)在編譯完成后將更新的模塊傳遞給開發(fā)服務(wù)器,然后通過熱更新中間件將更新的代碼發(fā)送給客戶端。在客戶端收到更新后,熱更新運(yùn)行時(shí)將會(huì)處理模塊更新并進(jìn)行模塊替換,以實(shí)現(xiàn)實(shí)時(shí)更新的效果。
原文鏈接:https://blog.csdn.net/wbskb/article/details/131562510
- 上一篇:沒有了
- 下一篇:沒有了
相關(guān)推薦
- 2022-11-01 python一行輸入多值的實(shí)現(xiàn)詳解_python
- 2021-12-03 C++中signed?main和int?main的區(qū)別_C 語(yǔ)言
- 2023-01-18 Golang?sync.Map原理深入分析講解_Golang
- 2023-12-26 layui彈窗傳值
- 2022-11-12 c++自定義sort()函數(shù)的排序方法介紹_C 語(yǔ)言
- 2022-10-21 golang?一次性定時(shí)器Timer用法及實(shí)現(xiàn)原理詳解_Golang
- 2023-01-17 C#?wpf利用附加屬性實(shí)現(xiàn)界面上定義裝飾器_C#教程
- 2022-03-27 Python?提速器numba_python
- 欄目分類
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支