<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        詳解Vue項目中出現Loading chunk {n} failed問題的解決方法

        來源:懂視網 責編:小采 時間:2020-11-27 22:07:44
        文檔

        詳解Vue項目中出現Loading chunk {n} failed問題的解決方法

        詳解Vue項目中出現Loading chunk {n} failed問題的解決方法:最近有個Vue項目中會偶爾出現Loading chunk {n} failed的報錯,報錯來自于webpack進行code spilt之后某些bundle文件lazy loading失敗。但是這個問題的根本原因沒有被找到,因為這個問題出現的偶然性太高了,而且有的手機上會出現,有的不會,用模擬器不會出現
        推薦度:
        導讀詳解Vue項目中出現Loading chunk {n} failed問題的解決方法:最近有個Vue項目中會偶爾出現Loading chunk {n} failed的報錯,報錯來自于webpack進行code spilt之后某些bundle文件lazy loading失敗。但是這個問題的根本原因沒有被找到,因為這個問題出現的偶然性太高了,而且有的手機上會出現,有的不會,用模擬器不會出現

        最近有個Vue項目中會偶爾出現Loading chunk {n} failed的報錯,報錯來自于webpack進行code spilt之后某些bundle文件lazy loading失敗。但是這個問題的根本原因沒有被找到,因為這個問題出現的偶然性太高了,而且有的手機上會出現,有的不會,用模擬器不會出現,用真機又會出現,不知道是網絡原因還是webpack的bug。在github、stackoverflow等各種地方也找不到原因和解決方案,這是github上關于這個問題的討論:Loading chunk {n} failed #742,雖然最后還是不了了之,但是大家可以參考一下。

        這個問題出現概率比較小但是一旦出現就會導致頁面崩潰,所以還是得解決,下面就貼出我的解決方案:

        我的思路是既然找不到報錯的原因那么嘗試去捕獲這個錯誤并做容錯處理,有兩種實現,一是在服務端捕獲這個錯誤,一個是在前端捕獲。

        服務端實現

        報錯的原因是某些js bundle沒有被找到,所以在服務端接收到獲取該js文件的請求時先判斷該js文件是否存在,如果存在直接返回js文件,如果不存在則返回一個提示信息給前端,讓前端處理。假設服務端用express作為靜態文件服務器,代碼如下:

        app.all(/\.js$/, (req, res) => {
         const fileName = req.path.slice(req.path.lastIndexOf('/') + 1);
         const filePath = path.resolve(__dirname, './public/static/js/' + fileName);
         if (fs.existsSync(filePath)) {
         fs.sendFile(filePath);
         } else {
         res.setHeader('Content-Type', 'application/javascript; charset=UTF-8')
         res.setHeader('Accept-Ranges', 'bytes')
         res.setHeader('Vary', 'Accept-Encoding')
         res.setHeader('Transfer-Encoding', 'chunked')
         res.setHeader('Last-Modified', new Date().toUTCString())
         res.setHeader('Cache-Control', 'no-cache')
         res.send('window.serverRebuildHook && window.serverRebuildHook();')
         }
        });

        當js文件未找到時,通過res.send('window.serverRebuildHook && window.serverRebuildHook();')向前端返回一條消息,并執行前端定義的serverRebuildHook方法。

        接著我們在前端實現serverRebuildHook方法:

        window.serverRebuildHook = function () {
         alert('服務器版本已更新,正在刷新本地緩存,請稍后...');
         location.replace(location.href);
        }

        方法很簡單,提示一下用戶服務端更新然后重新刷新當前頁面。

        這種實現是參考github上的回答, 相對比較繁瑣,而且用戶體驗并不好,只能刷新當前頁面,不能跳轉到目標頁。

        前端實現

        由于項目里面用到了vue-router,vue-router的錯誤處理函數 onError 是不是能夠捕獲該錯誤呢?我們來看一下官方文檔的說明:

        當在渲染一個路由的過程中,需要嘗試解析一個異步組件時發生錯誤。 完全符合我們場景,所以在onError方法中我們實現如下代碼:

        router.onError((error) => {
         const pattern = /Loading chunk (\d)+ failed/g;
         const isChunkLoadFailed = error.message.match(pattern);
         const targetPath = router.history.pending.fullPath;
         if (isChunkLoadFailed) {
         router.replace(targetPath);
         }
        });

        當捕獲到Loading chunk {n} failed的錯誤時我們重新渲染目標頁面,這種實現明顯更簡單和友好。

        后續如果發現了導致Loading chunk {n} failed的本質原因會再更新本文,歡迎關注!

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        詳解Vue項目中出現Loading chunk {n} failed問題的解決方法

        詳解Vue項目中出現Loading chunk {n} failed問題的解決方法:最近有個Vue項目中會偶爾出現Loading chunk {n} failed的報錯,報錯來自于webpack進行code spilt之后某些bundle文件lazy loading失敗。但是這個問題的根本原因沒有被找到,因為這個問題出現的偶然性太高了,而且有的手機上會出現,有的不會,用模擬器不會出現
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲精品久久无码| 国产 亚洲 中文在线 字幕 | 国产免费啪嗒啪嗒视频看看| 国产成人亚洲综合无码| 亚洲国产av高清无码| 国产黄在线观看免费观看不卡| 亚洲黄色免费网址| 精品亚洲一区二区三区在线观看 | 午夜性色一区二区三区免费不卡视频 | 亚洲av日韩精品久久久久久a| a色毛片免费视频| 免费看韩国黄a片在线观看| 精品亚洲一区二区三区在线播放| 国产福利免费视频| 日韩亚洲人成在线综合日本| 亚洲av综合av一区二区三区| 免费a级毛片无码a∨性按摩| 成人亚洲国产va天堂| 国产精品另类激情久久久免费 | rh男男车车的车车免费网站| 亚洲一区二区三区偷拍女厕| 99亚洲男女激情在线观看| 国产福利视精品永久免费| 亚洲人成人网站色www| 日韩午夜理论免费TV影院| 国产亚洲日韩在线三区| 四虎影视永久在线精品免费| 免费看又爽又黄禁片视频1000| 亚洲午夜久久影院| 精品亚洲永久免费精品 | 97视频免费在线| 精品亚洲视频在线| 国产精品亚洲片在线观看不卡 | 无码国产精品一区二区免费式直播 | 午夜国产羞羞视频免费网站| 免费毛片在线看不用播放器| 亚洲愉拍99热成人精品热久久| 99久久久国产精品免费蜜臀| 亚洲AV无码AV男人的天堂不卡 | 国产成人精品免费直播| 国产精品白浆在线观看免费|