最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue開發(fā)中出現(xiàn)Loading?Chunk?Failed的問題解決

 更新時(shí)間:2022年03月29日 17:21:37   作者:Yukon  
本文主要介紹了Vue開發(fā)中出現(xiàn)Loading?Chunk?Failed的問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

報(bào)錯(cuò)現(xiàn)象

某天測試反應(yīng)在點(diǎn)擊頁簽的時(shí)候出現(xiàn)了 Loading Chunk Failed 的錯(cuò)誤,經(jīng)過本人百度分析后判斷是異步組件在發(fā)包時(shí)舊資源被替換的問題,然后一通CV操作之后發(fā)現(xiàn)問題還是存在,于是便有如下探究。

發(fā)生原因

用戶在發(fā)包前進(jìn)入了頁面(也就是請(qǐng)求到了 index.html ),并且在 index.html 中可以得知將來要請(qǐng)求的異步組件的名字叫 a.js ,當(dāng)服務(wù)器這時(shí)候發(fā)包,并且清空掉了 a.js 這個(gè)資源,改名叫 a1.js 。發(fā)包之后用戶點(diǎn)擊 a.js 對(duì)應(yīng)的組件時(shí),瀏覽器拿著先前在 index.html 得知的 a.js 這個(gè)名字去服務(wù)器請(qǐng)求資源就得到了以上的 Loading Chunk Failed 報(bào)錯(cuò)。

正常的生產(chǎn)上線流程可能存在靜態(tài)資源和頁面分屬不同服務(wù)器,應(yīng)該是先全量部署靜態(tài)資源(各種js,css,圖片),不清空舊資源,然后再部署頁面。但如果清空掉舊資源就可能導(dǎo)致報(bào)錯(cuò)。

如果在測試環(huán)境中可能會(huì)采取清空覆蓋掉舊資源,這個(gè)時(shí)候就必須要前端進(jìn)行控制了。

解決思路

  • 在監(jiān)聽到路由報(bào)錯(cuò)的時(shí)候,前端強(qiáng)制刷新頁面,重新獲取index.html和對(duì)應(yīng)的靜態(tài)資源路徑。
  • 設(shè)置preFetch,網(wǎng)絡(luò)空閑的時(shí)候就請(qǐng)求資源,可以大幅降低報(bào)錯(cuò)的幾率。

觸發(fā)bug

想要解決問題首先就是得復(fù)現(xiàn)問題,涉及到發(fā)包上線的測試和驗(yàn)證都有點(diǎn)小尷尬,因此提供下個(gè)人思路

  • 最直接的就是你開個(gè)頁面,然后控制臺(tái)網(wǎng)絡(luò)禁用掉緩存,然后發(fā)包后進(jìn)入其他異步組件觸發(fā)bug。
  • 如果想要觸發(fā) onError 這個(gè)鉤子的話,直接斷開 devServer 就可以了。
  • 本地復(fù)現(xiàn)的話就是開個(gè)本地服務(wù)器,然后進(jìn)入頁面,把 dist 文件夾中對(duì)應(yīng)的js文件刪去即可觸發(fā)。

代碼實(shí)現(xiàn)

?/* 正則使用'\S'而不是'\d' 為了適配寫魔法注釋的朋友,寫'\d'遇到魔法注釋就匹配不成功了。
??* 使用reload方法而不是replace原因是replace還是去請(qǐng)求之前的js文件,會(huì)導(dǎo)致循環(huán)報(bào)錯(cuò)。
? * reload會(huì)刷新頁面, 請(qǐng)求最新的index.html以及最新的js路徑。
??* 直接修改location.href或使用location.assign或location.replace,和router.replace同理,?
? * 在當(dāng)前場景中請(qǐng)求的依然是原來的js文件,區(qū)別僅有瀏覽器的歷史棧。因此必須采用reload.
??* reload()有個(gè)特點(diǎn)是當(dāng)你在A頁面試圖進(jìn)入B頁面的時(shí)候報(bào)錯(cuò),會(huì)在A頁面刷新,因此在刷新后需要手動(dòng)書寫邏輯
? * 進(jìn)入B頁面,可以在router.onReady()方法里面書寫
? * 為了避免在特殊情況下服務(wù)器丟失資源導(dǎo)致無限報(bào)錯(cuò)刷新,做了一步控制,僅嘗試一次進(jìn)入B頁面,
? * 如果不成功就只刷新A頁面,停留在當(dāng)前的A頁面。
??*/
??
??
?router.onError((error) => {
???const jsPattern = /Loading chunk (\S)+ failed/g
???const cssPattern = /Loading CSS chunk (\S)+ failed/g
???const isChunkLoadFailed = error.message.match(jsPattern || cssPattern)
???const targetPath = router.history.pending.fullPath
???if (isChunkLoadFailed) {
?????localStorage.setItem('targetPath', targetPath)
?????window.location.reload()
?? }
?})
??
?router.onReady(() => {
???const targetPath = localStorage.getItem('targetPath')
???const tryReload = localStorage.getItem('tryReload')
???if (targetPath) {
?????localStorage.removeItem('targetPath')
?????if (!tryReload) {
???????router.replace(targetPath)
???????localStorage.setItem('tryReload', true)
???? } else {
???????localStorage.removeItem('tryReload')
???? }
?? }
?})

一點(diǎn)思考

我之前提到過異步組件而不是路由懶加載導(dǎo)致了這個(gè)問題的發(fā)生,有趣的是,當(dāng)你子組件是用懶加載方式進(jìn)行,并且沒有設(shè)置或者關(guān)閉了preFetch,且之前沒有緩存。很可能也會(huì)報(bào)這種錯(cuò)。在網(wǎng)絡(luò)中和路由懶加載一樣是報(bào) 404 找不到對(duì)應(yīng)資源,區(qū)別就是不會(huì)報(bào) loadingChunkError 的錯(cuò)誤。

設(shè)置緩存策略中頁面一定要對(duì)頁面( inedx.html )設(shè)置no cache no store,避免依然指向舊的已被刪除的資源,只有Get方式獲取的資源才可以設(shè)置緩存策略。

到此這篇關(guān)于Vue開發(fā)中出現(xiàn)Loading Chunk Failed的問題解決的文章就介紹到這了,更多相關(guān)Vue Loading Chunk Failed內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue.js中v-for指令的用法介紹

    Vue.js中v-for指令的用法介紹

    這篇文章介紹了Vue.js中v-for指令的用法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • 詳解如何在Vue中快速實(shí)現(xiàn)數(shù)據(jù)可視化大屏展示

    詳解如何在Vue中快速實(shí)現(xiàn)數(shù)據(jù)可視化大屏展示

    在現(xiàn)代數(shù)據(jù)驅(qū)動(dòng)的應(yīng)用程序中,數(shù)據(jù)可視化大屏已經(jīng)成為了非常重要的一環(huán),通過對(duì)海量數(shù)據(jù)進(jìn)行可視化展示,可以幫助用戶更好地理解和分析數(shù)據(jù),從而做出更加明智的決策,在Vue中進(jìn)行數(shù)據(jù)可視化大屏展示也變得越來越流行,本文將介紹如何在Vue中快速實(shí)現(xiàn)數(shù)據(jù)可視化大屏展示
    2023-10-10
  • vue中v-bind和v-model的區(qū)別及說明

    vue中v-bind和v-model的區(qū)別及說明

    這篇文章主要介紹了vue中v-bind和v-model的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • vue?el-input設(shè)置必填提示功能(單個(gè)與多個(gè))

    vue?el-input設(shè)置必填提示功能(單個(gè)與多個(gè))

    有的功能需要設(shè)置必填項(xiàng),當(dāng)然也需要判斷是不是添上了,下面這篇文章主要給大家介紹了關(guān)于vue?el-input設(shè)置必填提示功能(單個(gè)與多個(gè))的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • vue項(xiàng)目如何使用$router.go(-1)返回時(shí)刷新原來的界面

    vue項(xiàng)目如何使用$router.go(-1)返回時(shí)刷新原來的界面

    這篇文章主要介紹了vue項(xiàng)目如何使用$router.go(-1)返回時(shí)刷新原來的界面問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 詳解如何在Vue3中捕獲和處理錯(cuò)誤

    詳解如何在Vue3中捕獲和處理錯(cuò)誤

    Vue 3 作為前端開發(fā)中一個(gè)非常流行的框架,在錯(cuò)誤處理方面提供了靈活和強(qiáng)大的能力,本文將深入介紹在 Vue 3 中如何捕獲和處理錯(cuò)誤,包括組件級(jí)的錯(cuò)誤處理、全局錯(cuò)誤處理以及如何與異常日志系統(tǒng)集成,需要的朋友可以參考下
    2024-07-07
  • vue2 elementui if導(dǎo)致的rules判斷失效的解決方法

    vue2 elementui if導(dǎo)致的rules判斷失效的解決方法

    文章討論了在使用Vue2和ElementUI時(shí),將if語句放在el-form-item內(nèi)導(dǎo)致rules判斷失效的問題,并提出了將判斷邏輯移到外部的解決方案,感興趣的朋友一起看看吧
    2024-12-12
  • Vue3中引入scss文件的方法步驟

    Vue3中引入scss文件的方法步驟

    這篇文章主要給大家介紹了關(guān)于Vue3中引入scss文件的方法步驟,在實(shí)際項(xiàng)目中,各種樣式往往有很多重復(fù)的情況,為了能夠使樣式的后續(xù)開發(fā)和維護(hù)更加愜意,將這些共同的代碼進(jìn)行命名然后調(diào)用這些變量是一個(gè)很好的選擇,需要的朋友可以參考下
    2023-08-08
  • 如何在Vue中使用CleaveJS格式化你的輸入內(nèi)容

    如何在Vue中使用CleaveJS格式化你的輸入內(nèi)容

    這篇文章主要介紹了如何在Vue中使用CleaveJS格式化你的輸入內(nèi)容,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • vue-awesome-swiper 基于vue實(shí)現(xiàn)h5滑動(dòng)翻頁效果【推薦】

    vue-awesome-swiper 基于vue實(shí)現(xiàn)h5滑動(dòng)翻頁效果【推薦】

    說到h5的翻頁,很定第一時(shí)間想到的是swiper。但是我當(dāng)時(shí)想到的卻是,vue里邊怎么用swiper。這篇文章主要介紹了vue-awesome-swiper - 基于vue實(shí)現(xiàn)h5滑動(dòng)翻頁效果 ,需要的朋友可以參考下
    2018-11-11

最新評(píng)論

德令哈市| 华坪县| 连南| 嘉鱼县| 祁阳县| 陵川县| 焉耆| 朝阳县| 松桃| 宜都市| 两当县| 桐城市| 景洪市| 长乐市| 壤塘县| 永清县| 石阡县| 杭锦旗| 漳平市| 彰化市| 安乡县| 闸北区| 江油市| 六安市| 咸丰县| 顺平县| 荣昌县| 皮山县| 嘉义县| 宁晋县| 沁源县| 定兴县| 江城| 耿马| 佛教| 临汾市| 五原县| 崇礼县| 斗六市| 兴文县| 宜都市|