国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

webpack基礎知識六:說說webpack的熱更新是如何做到的?原理是什么?

這篇具有很好參考價值的文章主要介紹了webpack基礎知識六:說說webpack的熱更新是如何做到的?原理是什么?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

webpack基礎知識六:說說webpack的熱更新是如何做到的?原理是什么?,webpack,前端,node.js
一、是什么

HMR全稱 Hot Module Replacement,可以理解為模塊熱替換,指在應用程序運行過程中,替換、添加、刪除模塊,而無需重新刷新整個應用

例如,我們在應用運行過程中修改了某個模塊,通過自動刷新會導致整個應用的整體刷新,那頁面中的狀態(tài)信息都會丟失

如果使用的是 HMR,就可以實現(xiàn)只將修改的模塊實時替換至應用中,不必完全刷新整個應用

在webpack中配置開啟熱模塊也非常的簡單,如下代碼:

const webpack = require('webpack')
module.exports = {
  // ...
  devServer: {
    // 開啟 HMR 特性
    hot: true
    // hotOnly: true
  }
}

通過上述這種配置,如果我們修改并保存css文件,確實能夠以不刷新的形式更新到頁面中

但是,當我們修改并保存js文件之后,頁面依舊自動刷新了,這里并沒有觸發(fā)熱模塊

所以,HMR并不像 Webpack 的其他特性一樣可以開箱即用,需要有一些額外的操作

我們需要去指定哪些模塊發(fā)生更新時進行HRM,如下代碼:

if(module.hot){
    module.hot.accept('./util.js',()=>{
        console.log("util.js更新了")
    })
}

二、實現(xiàn)原理

首先來看看一張圖,如下:

webpack基礎知識六:說說webpack的熱更新是如何做到的?原理是什么?,webpack,前端,node.js

  • Webpack Compile:將 JS 源代碼編譯成 bundle.js
  • HMR Server:用來將熱更新的文件輸出給 HMR Runtime
  • Bundle Server:靜態(tài)資源文件服務器,提供文件訪問路徑
  • HMR Runtime:socket服務器,會被注入到瀏覽器,更新文件的變化
  • bundle.js:構(gòu)建輸出的文件
  • 在HMR Runtime 和 HMR Server之間建立 websocket,即圖上4號線,用于實時更新文件變化

上面圖中,可以分成兩個階段:

啟動階段為上圖 1 - 2 - A - B

在編寫未經(jīng)過webpack打包的源代碼后,Webpack Compile 將源代碼和 HMR Runtime 一起編譯成 bundle文件,傳輸給Bundle Server 靜態(tài)資源服務器

更新階段為上圖 1 - 2 - 3 - 4

當某一個文件或者模塊發(fā)生變化時,webpack監(jiān)聽到文件變化對文件重新編譯打包,編譯生成唯一的hash值,這個hash值用來作為下一次熱更新的標識

根據(jù)變化的內(nèi)容生成兩個補丁文件:manifest(包含了 hash 和 chundId,用來說明變化的內(nèi)容)和chunk.js 模塊

由于socket服務器在HMR Runtime 和 HMR Server之間建立 websocket鏈接,當文件發(fā)生改動的時候,服務端會向瀏覽器推送一條消息,消息包含文件改動后生成的hash值,如下圖的h屬性,作為下一次熱更細的標識

webpack基礎知識六:說說webpack的熱更新是如何做到的?原理是什么?,webpack,前端,node.js
在瀏覽器接受到這條消息之前,瀏覽器已經(jīng)在上一次socket 消息中已經(jīng)記住了此時的hash 標識,這時候我們會創(chuàng)建一個 ajax 去服務端請求獲取到變化內(nèi)容的 manifest 文件

mainfest文件包含重新build生成的hash值,以及變化的模塊,對應上圖的c屬性

瀏覽器根據(jù) manifest 文件獲取模塊變化的內(nèi)容,從而觸發(fā)render流程,實現(xiàn)局部模塊更新

webpack基礎知識六:說說webpack的熱更新是如何做到的?原理是什么?,webpack,前端,node.js
三、總結(jié)

關于webpack熱模塊更新的總結(jié)如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-639045.html

  • 通過webpack-dev-server創(chuàng)建兩個服務器:提供靜態(tài)資源的服務(express)和Socket服務
  • express server 負責直接提供靜態(tài)資源的服務(打包后的資源直接被瀏覽器請求和解析)
  • socket server 是一個 websocket 的長連接,雙方可以通信
  • 當 socket server 監(jiān)聽到對應的模塊發(fā)生變化時,會生成兩個文件.json(manifest文件)和.js文件(update chunk)
  • 通過長連接,socket server 可以直接將這兩個文件主動發(fā)送給客戶端(瀏覽器)
  • 瀏覽器拿到兩個新的文件后,通過HMR runtime機制,加載這兩個文件,并且針對修改的模塊進行更新

到了這里,關于webpack基礎知識六:說說webpack的熱更新是如何做到的?原理是什么?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • webpack基礎知識五:說說Loader和Plugin的區(qū)別?編寫Loader,Plugin的思路?

    webpack基礎知識五:說說Loader和Plugin的區(qū)別?編寫Loader,Plugin的思路?

    一、區(qū)別 前面兩節(jié)我們有提到Loader與Plugin對應的概念,先來回顧下 loader 是文件加載器,能夠加載資源文件,并對這些文件進行一些處理,諸如編譯、壓縮等,最終一起打包到指定的文件中 plugin 賦予了 webpack 各種靈活的功能,例如打包優(yōu)化、資源管理、環(huán)境變量注入等,目

    2024年02月14日
    瀏覽(25)
  • webpack基礎知識九:如何提高webpack的構(gòu)建速度?

    webpack基礎知識九:如何提高webpack的構(gòu)建速度?

    一、背景 隨著我們的項目涉及到頁面越來越多,功能和業(yè)務代碼也會隨著越多,相應的 webpack 的構(gòu)建時間也會越來越久 構(gòu)建時間與我們?nèi)粘i_發(fā)效率密切相關,當我們本地開發(fā)啟動 devServer 或者 build 的時候,如果時間過長,會大大降低我們的工作效率 所以,優(yōu)化webpack 構(gòu)建

    2024年02月14日
    瀏覽(24)
  • 網(wǎng)絡基礎知識(2)——簡單說說IP地址

    網(wǎng)絡基礎知識(2)——簡單說說IP地址

    ????????Internet 依靠 TCP/IP 協(xié)議,在全球范圍內(nèi)實現(xiàn)不同硬件結(jié)構(gòu)、不同操作系統(tǒng)、不同網(wǎng)絡系統(tǒng)的主機之間的互聯(lián)。在 Internet 上,每一個節(jié)點都依靠唯一的 IP 地址相互區(qū)分和相互聯(lián)系,IP 地址用于標識互聯(lián)網(wǎng)中的每臺主機的身份,設計人員為每個接入網(wǎng)絡中的主機都分

    2024年02月04日
    瀏覽(19)
  • webpack 的熱更新及其原理

    Webpack 的熱更新(Hot Module Replacement,簡稱HMR)是一種開發(fā)時提供實時更新的功能,它使得在修改代碼后,不需要完全刷新頁面就能立即看到更新的效果。 HMR 的原理涉及以下幾個主要步驟: 啟動時建立 WebSocket 連接:在項目啟動時,Webpack 會創(chuàng)建與開發(fā)服務器的WebSocket連接,用

    2024年02月13日
    瀏覽(19)
  • css基礎知識二十:說說對Css預編語言的理解?有哪些區(qū)別?

    css基礎知識二十:說說對Css預編語言的理解?有哪些區(qū)別?

    一、是什么 Css 作為一門標記性語言,語法相對簡單,對使用者的要求較低,但同時也帶來一些問題 需要書寫大量看似沒有邏輯的代碼,不方便維護及擴展,不利于復用,尤其對于非前端開發(fā)工程師來講,往往會因為缺少 Css 編寫經(jīng)驗而很難寫出組織良好且易于維護的 Css 代碼

    2024年02月16日
    瀏覽(24)
  • webpack基礎知識

    webpack基礎知識

    webpack的本質(zhì)是一個第三方模塊包,用于分析,并打包代碼 支持所有類型的文件打包 支持less/sass= css 支持ES6/7/8=ES5 壓縮代碼,提高加載速度 yarn安裝 配置環(huán)境變量 驗證 配置scripts 需求 兩個js文件打包成一個js文件 index.js add.js 打包命令 在對應src目錄下

    2024年02月13日
    瀏覽(21)
  • css基礎知識三:說說em/px/rem/vh/vw的區(qū)別?

    css基礎知識三:說說em/px/rem/vh/vw的區(qū)別?

    一、介紹 傳統(tǒng)的項目開發(fā)中,我們只會用到px、%、em這幾個單位,它可以適用于大部分的項目開發(fā),且擁有比較良好的兼容性 從CSS3開始,瀏覽器對計量單位的支持又提升到了另外一個境界,新增了rem、vh、vw、vm等一些新的計量單位 利用這些新的單位開發(fā)出比較良好的響應式

    2024年02月09日
    瀏覽(36)
  • webpack基礎知識十:與webpack類似的工具還有哪些?區(qū)別?

    webpack基礎知識十:與webpack類似的工具還有哪些?區(qū)別?

    一、模塊化工具 模塊化是一種處理復雜系統(tǒng)分解為更好的可管理模塊的方式 可以用來分割,組織和打包應用。每個模塊完成一個特定的子功能,所有的模塊按某種方法組裝起來,成為一個整體(bundle) 在前端領域中,并非只有webpack這一款優(yōu)秀的模塊打包工具,還有其他類似的

    2024年02月13日
    瀏覽(26)
  • css基礎知識四:說說設備像素、css像素、設備獨立像素、dpr、ppi 之間的區(qū)別?

    css基礎知識四:說說設備像素、css像素、設備獨立像素、dpr、ppi 之間的區(qū)別?

    一、背景 在css中我們通常使用px作為單位,在PC瀏覽器中css的1個像素都是對應著電腦屏幕的1個物理像素 這會造成一種錯覺,我們會認為css中的像素就是設備的物理像素 但實際情況卻并非如此,css中的像素只是一個抽象的單位,在不同的設備或不同的環(huán)境中,css中的1px所代表

    2024年02月10日
    瀏覽(31)
  • 【前端工程化面試題目】webpack 的熱更新原理

    【前端工程化面試題目】webpack 的熱更新原理

    可以在順便學習一下 vite 的熱更新原理,請參考這篇文章。 首先有幾個知識點需要明確 熱更新是針對開發(fā)過程中的開發(fā)服務器的,也就是 webpack-dev-server webpack 的熱更新不需要額外的插件,但是需要在配置文件中 devServer 屬性中配置 hot: true,需要安裝?webpack-dev-server 這個

    2024年02月19日
    瀏覽(95)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包