<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
某天測試反應在點選頁籤的時候出現了 Loading Chunk Failed 的錯誤,經過本人百度分析後判斷是非同步元件在發包時舊資源被替換的問題,然後一通CV操作之後發現問題還是存在,於是便有如下探究。
使用者在發包前進入了頁面(也就是請求到了 index.html ),並且在 index.html 中可以得知將來要請求的非同步元件的名字叫 a.js ,當伺服器這時候發包,並且清空掉了 a.js 這個資源,改名叫 a1.js 。發包之後使用者點選 a.js 對應的元件時,瀏覽器拿著先前在 index.html 得知的 a.js 這個名字去伺服器請求資源就得到了以上的 Loading Chunk Failed 報錯。
正常的生產上線流程可能存在靜態資源和頁面分屬不同伺服器,應該是先全量部署靜態資源(各種js,css,圖片),不清空舊資源,然後再部署頁面。但如果清空掉舊資源就可能導致報錯。
如果在測試環境中可能會採取清空覆蓋掉舊資源,這個時候就必須要前端進行控制了。
想要解決問題首先就是得復現問題,涉及到發包上線的測試和驗證都有點小尷尬,因此提供下個人思路
程式碼實現
/* 正則使用'S'而不是'd' 為了適配寫魔法註釋的朋友,寫'd'遇到魔法註釋就匹配不成功了。 * 使用reload方法而不是replace原因是replace還是去請求之前的js檔案,會導致迴圈報錯。 * reload會重新整理頁面, 請求最新的index.html以及最新的js路徑。 * 直接修改location.href或使用location.assign或location.replace,和router.replace同理, * 在當前場景中請求的依然是原來的js檔案,區別僅有瀏覽器的歷史棧。因此必須採用reload. * reload()有個特點是當你在A頁面試圖進入B頁面的時候報錯,會在A頁面重新整理,因此在重新整理後需要手動書寫邏輯 * 進入B頁面,可以在router.onReady()方法裡面書寫 * 為了避免在特殊情況下伺服器丟失資源導致無限報錯重新整理,做了一步控制,僅嘗試一次進入B頁面, * 如果不成功就只重新整理A頁面,停留在當前的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') } } })
我之前提到過非同步元件而不是路由懶載入導致了這個問題的發生,有趣的是,當你子元件是用懶載入方式進行,並且沒有設定或者關閉了preFetch,且之前沒有快取。很可能也會報這種錯。在網路中和路由懶載入一樣是報 404 找不到對應資源,區別就是不會報 loadingChunkError 的錯誤。
設定快取策略中頁面一定要對頁面( inedx.html )設定no cache no store,避免依然指向舊的已被刪除的資源,只有Get方式獲取的資源才可以設定快取策略。
到此這篇關於Vue開發中出現Loading Chunk Failed的問題解決的文章就介紹到這了,更多相關Vue Loading Chunk Failed內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45