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

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

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

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

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

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

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

報(bào)錯(cuò)的原因是某些js bundle沒有被找到,所以在服務(wù)端接收到獲取該js文件的請求時(shí)先判斷該js文件是否存在,如果存在直接返回js文件,如果不存在則返回一個(gè)提示信息給前端,讓前端處理。假設(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文件未找到時(shí),通過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的錯(cuò)誤處理函數(shù) onError 是不是能夠捕獲該錯(cuò)誤呢?我們來看一下官方文檔的說明:

當(dāng)在渲染一個(gè)路由的過程中,需要嘗試解析一個(gè)異步組件時(shí)發(fā)生錯(cuò)誤。 完全符合我們場景,所以在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的錯(cuò)誤時(shí)我們重新渲染目標(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打包添加gzip配置項(xiàng)方式

    vue打包添加gzip配置項(xiàng)方式

    這篇文章主要介紹了vue打包添加gzip配置項(xiàng)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue實(shí)現(xiàn)短信驗(yàn)證碼登錄功能(流程詳解)

    vue實(shí)現(xiàn)短信驗(yàn)證碼登錄功能(流程詳解)

    無論是移動端還是pc端登錄或者注冊界面都會見到手機(jī)驗(yàn)證碼登錄這個(gè)功能,輸入手機(jī)號,得到驗(yàn)證碼,這篇文章主要介紹了基于vue實(shí)現(xiàn)短信驗(yàn)證碼登錄功能,需要的朋友可以參考下
    2019-12-12
  • Vue.js2.0中的變化小結(jié)

    Vue.js2.0中的變化小結(jié)

    最近小編在學(xué)習(xí)vue.js ,發(fā)現(xiàn)里面有好多好玩的東東,今天小編給大家分享Vue.js2.0中的變化,小編會在日后給大家持續(xù)更新的,感興趣的朋友參考下吧
    2017-10-10
  • el-tree設(shè)置選中高亮/焦點(diǎn)高亮、選中節(jié)點(diǎn)加深背景及更改字體顏色等的方法

    el-tree設(shè)置選中高亮/焦點(diǎn)高亮、選中節(jié)點(diǎn)加深背景及更改字體顏色等的方法

    el-tree默認(rèn)有較淺的背景色,這里業(yè)務(wù)需要,選中節(jié)點(diǎn)的字體高亮,更改顏色,下面這篇文章主要給大家介紹了關(guān)于el-tree選中高亮/焦點(diǎn)高亮、選中節(jié)點(diǎn)加深背景及更改字體顏色等的設(shè)置方法,需要的朋友可以參考下
    2022-12-12
  • 深入理解vue中的?slot-scope=“scope“

    深入理解vue中的?slot-scope=“scope“

    這篇文章主要介紹了理解vue中的?slot-scope=“scope“,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 詳解vuex中的this.$store.dispatch方法

    詳解vuex中的this.$store.dispatch方法

    這篇文章主要介紹了vuex中的this.$store.dispatch方法,必須要用commit(‘SET_TOKEN’,?tokenV)調(diào)用mutations里的方法,才能在store存儲成功,需要的朋友可以參考下
    2022-11-11
  • 簡單的vuex 的使用案例筆記

    簡單的vuex 的使用案例筆記

    這篇文章主要介紹了簡單的vuex 的使用案例筆記,本文通過demo 是一個(gè) 改變 app 的模式 的一個(gè)appellation ,選擇是 夜間模式還是白天模式,具體代碼大家參考下本文
    2018-04-04
  • vue引入外部的js文件的10種方法總結(jié)

    vue引入外部的js文件的10種方法總結(jié)

    這篇文章主要為大家詳細(xì)介紹了vue項(xiàng)目中引入外部的js文件的10種方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的小伙伴可以參考下
    2023-08-08
  • Vue3+Vite項(xiàng)目按需自動導(dǎo)入配置以及一些常見問題修復(fù)

    Vue3+Vite項(xiàng)目按需自動導(dǎo)入配置以及一些常見問題修復(fù)

    Vite是一種新型前端構(gòu)建工具,能夠顯著提升前端開發(fā)體驗(yàn),下面這篇文章主要給大家介紹了關(guān)于Vue3+Vite項(xiàng)目按需自動導(dǎo)入配置以及一些常見問題修復(fù)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • Vue中的methods、computed計(jì)算屬性和watch監(jiān)聽屬性的使用和區(qū)別解析

    Vue中的methods、computed計(jì)算屬性和watch監(jiān)聽屬性的使用和區(qū)別解析

    這篇文章主要介紹了Vue中的methods、computed計(jì)算屬性和watch監(jiān)聽屬性的使用和區(qū)別,本文通過示例代碼給大家介紹的非常詳細(xì)對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-01-01

最新評論

霍城县| 应用必备| 肇州县| 秦皇岛市| 墨竹工卡县| 新营市| 桃江县| 云浮市| 文昌市| 黄浦区| 贵定县| 镇江市| 全州县| 文登市| 芜湖县| 峨眉山市| 乌兰县| 德阳市| 阿克苏市| 四会市| 加查县| 乌海市| 图木舒克市| 虞城县| 长岛县| 黄平县| 广汉市| 安义县| 南平市| 新余市| 喀什市| 惠来县| 胶南市| 大兴区| 茌平县| 西吉县| 瓮安县| 达拉特旗| 水富县| 永寿县| 菏泽市|