Vue項(xiàng)目每次發(fā)版后要清理瀏覽器緩存問(wèn)題解決辦法
打包的時(shí)候給每個(gè)打包文件后面加一個(gè)時(shí)間戳,通過(guò) vue.config.js 配置
const timeStamp = new Date().getTime() module.exports = { // 打包的時(shí)候不使用hash值.因?yàn)槲覀冇袝r(shí)間戳來(lái)確定項(xiàng)目的唯一性了. filenameHashing: false, configureWebpack: { // 輸出重構(gòu) 打包編譯后的js文件名稱,添加時(shí)間戳 output: { filename: `js/[name].${timeStamp}.js`, chunkFilename: `js/chunk.[id].${timeStamp}.js`, }, }, css: { // 打包后css文件名稱添加時(shí)間戳 extract: { filename: `css/[name].${timeStamp}.css`, chunkFilename: `css/chunk.[id].${timeStamp}.css`, }, }, }
這樣可以解決問(wèn)題,每次打包發(fā)布之后,項(xiàng)目不需要強(qiáng)制清理緩存就可以試試更新內(nèi)容了。但是這時(shí)候又有一個(gè)新問(wèn)題產(chǎn)生。 就是這樣打包完發(fā)布之后,因?yàn)槊看蔚奈募灰粯?,?xiàng)目中偶爾會(huì)報(bào)錯(cuò) ChunkLoadError: Loading chunk failed。原因就是瀏覽器取的是緩存中的文件名稱,新打包之后,文件名稱改變,導(dǎo)致瀏覽器找不到文件了 404。需要刷新頁(yè)面,重新加載文件。
先說(shuō)一下單獨(dú)解決這個(gè)問(wèn)題的方法
// 在main.js中 /* 路由異常錯(cuò)誤處理,嘗試解析一個(gè)異步組件時(shí)發(fā)生錯(cuò)誤,重新渲染目標(biāo)頁(yè)面 */ router.onError((error) => { const pattern = /Loading chunk (\d)+ failed/g const isChunkLoadFailed = error.message.match(pattern) const targetPath = router.history.pending.fullPath if (isChunkLoadFailed) { // 用路由的replace方法, // 并沒(méi)有相當(dāng)于F5刷新頁(yè)面, // 失敗的js文件并沒(méi)有從新請(qǐng)求, // 會(huì)導(dǎo)致一直嘗試replace頁(yè)面導(dǎo)致死循環(huán), // 而用 location.reload 方法,相當(dāng)于觸發(fā)F5刷新頁(yè)面, // 雖然用戶體驗(yàn)上來(lái)說(shuō)會(huì)有刷新加載察覺(jué),但不會(huì)導(dǎo)致頁(yè)面卡死及死循環(huán), // 從而曲線救國(guó)解決該問(wèn)題 window.location.reload() // router.replace(targetPath); } else { console.log('no') } })
當(dāng)捕獲到 Loading chunk {n} failed 的錯(cuò)誤時(shí)我們重新渲染目標(biāo)頁(yè)面,這種實(shí)現(xiàn)明顯更簡(jiǎn)單和友好。
結(jié)合我們上面的問(wèn)題,想到了一個(gè)新的解決方式,在打包的時(shí)候,文件名稱不變,使用版本號(hào)。這樣也可以實(shí)現(xiàn)每次打包發(fā)布后不需要強(qiáng)制清理緩存,又不會(huì)出現(xiàn)找不到文件的情況
在 vue.config.js 中,將 name.timeStamp.js 改成 name.js?v=timeStamp
const timeStamp = new Date().getTime() module.exports = { configureWebpack: { output: { filename: `js/[name].js?v=${timeStamp}`, chunkFilename: `js/chunk.[id].js?v=${timeStamp}`, }, }, css: { extract: { filename: `css/[name].css?v=${timeStamp}`, chunkFilename: `css/chunk.[id].css?v=${timeStamp}`, }, },
總結(jié)
到此這篇關(guān)于Vue項(xiàng)目每次發(fā)版后要清理瀏覽器緩存問(wèn)題解決的文章就介紹到這了,更多相關(guān)Vue發(fā)版后要清理瀏覽器緩存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue將后臺(tái)數(shù)據(jù)時(shí)間戳轉(zhuǎn)換成日期格式
這篇文章主要為大家詳細(xì)介紹了vue將后臺(tái)數(shù)據(jù)時(shí)間戳轉(zhuǎn)換成日期格式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07vue 使用鼠標(biāo)滾動(dòng)加載數(shù)據(jù)的例子
今天小編就為大家分享一篇vue 使用鼠標(biāo)滾動(dòng)加載數(shù)據(jù)的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10vue-cli項(xiàng)目中使用echarts圖表實(shí)例
在本篇文章里我們給大家分享了關(guān)于vue中使用echarts圖表的實(shí)現(xiàn)方法,有興趣的朋友們學(xué)習(xí)下。2018-10-10vue3+vite兼容低版本的白屏問(wèn)題詳解(安卓7/ios11)
這篇文章主要給大家介紹了關(guān)于vue3+vite兼容低版本的白屏問(wèn)題的相關(guān)資料,還給大家介紹了vue打包項(xiàng)目以后白屏和圖片加載不出來(lái)問(wèn)題的解決方法,需要的朋友可以參考下2022-12-12vue3中使用highlight.js實(shí)現(xiàn)代碼高亮顯示的代碼示例
代碼高亮是在網(wǎng)頁(yè)開(kāi)發(fā)中常見(jiàn)的需求之一,它可以使代碼在頁(yè)面上以不同的顏色或樣式進(jìn)行突出顯示提高可讀性,這篇文章主要介紹了vue3中使用highlight.js實(shí)現(xiàn)代碼高亮顯示的相關(guān)資料,需要的朋友可以參考下2025-04-04vue 使用html2canvas將DOM轉(zhuǎn)化為圖片的方法
這篇文章主要介紹了vue 使用html2canvas將DOM轉(zhuǎn)化為圖片的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09Vue?動(dòng)態(tài)路由的實(shí)現(xiàn)詳情
這篇文章主要介紹了Vue?動(dòng)態(tài)路由的實(shí)現(xiàn),動(dòng)態(tài)路由是一個(gè)常用的功能,根據(jù)后臺(tái)返回的路由json表,前端動(dòng)態(tài)顯示可跳轉(zhuǎn)的路由項(xiàng),本文主要實(shí)現(xiàn)的是后臺(tái)傳遞路由,前端拿到并生成側(cè)邊欄的一個(gè)形勢(shì),需要的朋友可以參考一下2022-06-06