欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2018年09月14日 11:48:07   作者:MudOnTire  
這篇文章主要介紹了詳解Vue項(xiàng)目中出現(xiàn)Loading chunk {n} failed問題的解決方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

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

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

服務(wù)端實(shí)現(xiàn)

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

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();')
  }
});

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

接著我們在前端實(shí)現(xiàn)serverRebuildHook方法:

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

方法很簡單,提示一下用戶服務(wù)端更新然后重新刷新當(dāng)前頁面。

這種實(shí)現(xiàn)是參考github上的回答, 相對比較繁瑣,而且用戶體驗(yàn)并不好,只能刷新當(dāng)前頁面,不能跳轉(zhuǎn)到目標(biāo)頁。

前端實(shí)現(xiàn)

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

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

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);
 }
});

當(dāng)捕獲到Loading chunk {n} failed的錯誤時我們重新渲染目標(biāo)頁面,這種實(shí)現(xiàn)明顯更簡單和友好。

后續(xù)如果發(fā)現(xiàn)了導(dǎo)致Loading chunk {n} failed的本質(zhì)原因會再更新本文,歡迎關(guān)注!

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue父子組件傳值以及單向數(shù)據(jù)流問題詳解

    vue父子組件傳值以及單向數(shù)據(jù)流問題詳解

    大家應(yīng)該都知道父組件可以向子組件通過屬性形式傳遞參數(shù),傳遞的參數(shù)也可以隨時隨意修改;但子組件不能修改父組件傳遞過來的參數(shù),所以下面這篇文章主要給大家介紹了關(guān)于vue父子組件傳值以及單向數(shù)據(jù)流問題的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • Vue父子組件通信全面詳細(xì)介紹

    Vue父子組件通信全面詳細(xì)介紹

    這篇文章主要介紹了React中父子組件通信詳解,在父組件中,為子組件添加屬性數(shù)據(jù),即可實(shí)現(xiàn)父組件向子組件通信,文章通過圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-10-10
  • Vue中引入bootstrap.min.css的正確姿勢分享

    Vue中引入bootstrap.min.css的正確姿勢分享

    這篇文章主要介紹了Vue中引入bootstrap.min.css的正確姿勢,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue路由跳轉(zhuǎn)傳參數(shù)的方法

    vue路由跳轉(zhuǎn)傳參數(shù)的方法

    這篇文章主要介紹了vue路由跳轉(zhuǎn)傳參數(shù)的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • vue 純js監(jiān)聽滾動條到底部的實(shí)例講解

    vue 純js監(jiān)聽滾動條到底部的實(shí)例講解

    今天小編就為大家分享一篇vue 純js監(jiān)聽滾動條到底部的實(shí)例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • Vue實(shí)現(xiàn)拖拽改變列表順序詳解

    Vue實(shí)現(xiàn)拖拽改變列表順序詳解

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)拖拽改變列表順序的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • 如何在Vue中獲取DOM元素的實(shí)際寬高

    如何在Vue中獲取DOM元素的實(shí)際寬高

    使用vue的時候,想要獲得一個指定的元素的高度時,下面這篇文章主要給大家介紹了關(guān)于如何在Vue中獲取DOM元素的實(shí)際寬高的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • vue如何將字符串的一部分處理為html文檔并渲染到頁面

    vue如何將字符串的一部分處理為html文檔并渲染到頁面

    這篇文章主要介紹了vue如何將字符串的一部分處理為html文檔并渲染到頁面,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • VUE UPLOAD 通過ACTION返回上傳結(jié)果操作

    VUE UPLOAD 通過ACTION返回上傳結(jié)果操作

    這篇文章主要介紹了VUE UPLOAD 通過ACTION返回上傳結(jié)果操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • vue兩個輸入框聯(lián)動校驗(yàn)方式(最大值-最小值)

    vue兩個輸入框聯(lián)動校驗(yàn)方式(最大值-最小值)

    這篇文章主要介紹了vue兩個輸入框聯(lián)動校驗(yàn)方式(最大值-最小值),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10

最新評論