成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Webpack原理與實踐之如何讓你的模塊支持熱替換?

開發 前端
其實在我們自己在項目中配置HMR時,需要寫一些額外的代碼會覺得比較麻煩,但是還是需要我們了解其深層的原理。

[[441651]]

寫在前面

在上一文中介紹了《如何使用DevServer提高你的本地開發效率》,在配置好DevServer可以讓我們更加專注業務編碼,可以實現代碼更新來讓頁面樣式重新渲染。但是當我們使用DevServer去自動刷新時,例如在進行編輯器開發修改了文本樣式,會刷新頁面編輯器文本丟失,不能實時顯示樣式。當然我們也有對應的解決方法,例如:

  • 可以回到代碼中寫死文本內容到編輯器中,這樣即使頁面刷新,也不會丟失內容
  • 通過代碼將編輯器中的內容及時保存到localStorage中,刷新后再重新獲取 但是,這些方法存在不足,只是有漏補漏的措施,并沒有根本解決問題,并不適合代碼的維護。這時候webpack就提供了模塊熱替換HMR來解決我們的問題。

模塊熱替換HMR

HMR全稱 Hot Module Replacement,即為"模塊熱替換"或"模塊熱更新"。在計算機領域有個"熱插拔"的概念,指的是在正在運行的計算機設備上插拔設備,并不會影響計算機的正常運行,插上去的設備能夠立刻工作。這里的"熱"指的是在運行過程中的即時變化。

HMR已經集成在webpack模塊中,所以不需要再單獨安裝模塊,在運行webpack-dev-server命令時,通過--hot參數去開啟這個特性,或者也可以在配置文件中通過添加對應的配置來開啟這個功能,這里需要配置兩個地方:

  • 需要將devServer對象中的hot屬性設置為true
  • 需要載入一個插件,這個插件是webpack內置的一個插件,所以先導入webpack模塊,有了模塊后就可以使用一個叫做HotModuleReplacementPlugin插件。
  1. const webpack = require("webpack"
  2. module.exports ={ 
  3.   devServer:{ 
  4.     // 開啟HMR特性,如果資源不支持HMR會fallback到live reloading 
  5.     hot: true 
  6.     // 只使用HMR,不會fallback到live reloading 
  7.     // hotOnly:true 
  8.   }, 
  9.   plugins:[ 
  10.     // HMR特性所需要的插件 
  11.     new webpack.HotModuleReplacementPlugin() 
  12.   ] 

至于為什么我們開啟HMR過后,樣式文件的修改就可以直接熱更新呢,而且我們并沒有手動處理樣式模塊的更新?這是因為樣式文件是經過Loader處理的,在style-loader中就已經自動處理了樣式文件的熱更新,所以就不需要我們額外手動去處理。

那么什么樣式可以自動更新處理呢,然而我們的腳本文件卻需要自己手動處理?這是因為樣式模塊更新后,只需要將更新后的css及時替換到頁面中,這樣就可以覆蓋掉之前的樣式,從而實現更新。

然而我們在使用vue-cli或者create-react-app框架腳手架工具時,可能沒有進行手動處理,js代碼照樣可以實現熱替換。這是因為我們在使用框架的時候,項目中的每個文件都是有規律可循的,比如:react中要求每個模塊導出的必須是個函數或者類,那么這樣就可以有通用的替換方法,所以這些工具內部都已經實現了通用的替換操作,就不再需要我們手動處理了。

參考文章

《webpack原理與實踐》

《webpack中文文檔》

寫在最后

 

其實在我們自己在項目中配置HMR時,需要寫一些額外的代碼會覺得比較麻煩,但是還是需要我們了解其深層的原理。關于前端框架vue、react都是集成式框架,都是開箱即用,已經繼承了HMR相關的配置。

 

責任編輯:武曉燕 來源: 前端萬有引力
相關推薦

2021-12-16 22:02:28

webpack原理模塊化

2021-12-20 00:03:38

Webpack運行機制

2021-12-24 08:01:44

Webpack優化打包

2021-12-15 23:42:56

Webpack原理實踐

2021-12-21 14:00:25

WebpackDevServer的開發

2021-12-17 00:02:28

Webpack資源加載

2021-12-25 22:29:04

WebpackRollup 前端

2021-12-19 07:21:48

Webpack 前端插件機制

2021-04-19 10:45:52

Webpack熱更新前端

2017-03-24 10:56:21

Webpack技巧建議

2017-05-02 16:29:11

Webpack技巧建議

2010-02-03 09:01:01

Java動態模塊化

2021-05-06 14:34:12

Webpack熱更新程序

2021-05-31 05:36:43

WebpackJavaScript 前端

2013-04-16 16:01:51

APP支持iPhoneiOS開發

2020-08-05 08:21:41

Webpack

2010-03-02 09:38:16

Java熱替換

2021-01-29 10:36:20

Bundle文件Apple

2023-07-31 09:59:17

JavaJVMAgent

2023-03-15 15:56:09

新華三
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕精品视频 | 亚洲高清视频在线观看 | 亚洲精品视频在线播放 | 中文字幕在线观看视频一区 | 国产不卡一区在线观看 | 午夜天堂精品久久久久 | 日韩精品一区二区三区在线播放 | 欧美精品一区二区三区一线天视频 | 精品中文在线 | 久久久久亚洲精品 | 毛片网在线观看 | 精品免费 | 亚洲美女视频 | 美女二区 | 欧美日韩国产精品 | 久久久久久国产精品免费免费男同 | 最新av在线播放 | 天天宗合网 | 国产精品美女视频 | 午夜视频在线 | 九热在线| 狠狠亚洲| 美女黄色在线观看 | 阿v视频在线观看 | 97精品视频在线 | 成人在线免费观看 | 亚洲成人自拍 | 国产精品高潮呻吟久久av野狼 | 午夜婷婷激情 | 国产一区二区三区色淫影院 | 91高清在线观看 | 精品1区| 国产日韩欧美激情 | av手机免费在线观看 | 国产精品久久久久久久久久软件 | 丝袜美腿一区二区三区动态图 | 午夜日韩| 91久久精品日日躁夜夜躁欧美 | 国产精品美女一区二区 | 亚洲精品日韩视频 | 色婷婷综合久久久中文字幕 |