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

Vite版本更新檢查實現(xiàn)頁面自動刷新的解決思路

 更新時間:2023年02月08日 11:26:24   作者:Naomi_233  
這篇文章主要給大家介紹了關于Vite版本更新檢查實現(xiàn)頁面自動刷新的解決思路,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

前端版本更新檢查,實現(xiàn)頁面自動刷新

使用vite對項目進行打包,對 js 和 css 文件使用了 chunkhash 進行了文件緩存控制,但是項目的index.html文件在版本頻繁迭代更新時,會存在被瀏覽器緩存的情況。

在發(fā)版后,如果用戶不強制刷新頁面,瀏覽器會使用舊的index.html文件,在跳轉(zhuǎn)頁面時會向服務器端請求了上個版本 chunkhash 的 js 和 css 文件,但此時的文件已經(jīng)在版本更新時已替換刪除了,最終表現(xiàn)為頁面卡頓,控制臺報錯 404。

解決思路

思路 1

服務器端發(fā)版時,上一個版本的assets內(nèi)的文件不刪除。

缺點是會隨著頻繁發(fā)版,服務器端前端項目文件會越來越多,浪費空間;若舊頁面的接口涉及到參數(shù)改動等,會引起報錯;流水線使用 docker 打包部署會變得非常麻煩。

思路 2

在每次打包生產(chǎn)代碼時,在public下生成一個version.json版本信息文件,頁面跳轉(zhuǎn)時請求服務器端的version.json中的版本號和瀏覽器本地緩存的版本號進行對比,從而監(jiān)控版本迭代更新,實現(xiàn)頁面自動更新,獲取新的index.html文件(前提是服務器端對index.html進行不緩存配置)。

1.首先應該禁止瀏覽器緩存index.htmlversion.json,這里實現(xiàn)nginx的不緩存處理

添加nginx配置

location ~ .*\.(htm|html|json)?$ {    expires -1;}

2.使用Vite 插件打包時自動生成版本信息

版本信息插件

// versionUpdatePlugin.js
const fs = require('fs')
const path = require('path')

const writeVersion = (versionFile, content) => {
  // 寫入文件
  fs.writeFile(versionFile, content, (err) => {
    if (err) throw err
  })
}

export default (options) => {
  let config

  return {
    name: 'version-update',

    configResolved(resolvedConfig) {
      // 存儲最終解析的配置
      config = resolvedConfig
    },

    buildStart() {
      // 生成版本信息文件路徑
      const file = config.publicDir + path.sep + 'version.json'
      // 這里使用編譯時間作為版本信息
      const content = JSON.stringify({ version: options.version })

      if (fs.existsSync(config.publicDir)) {
        writeVersion(file, content)
      } else {
        fs.mkdir(config.publicDir, (err) => {
          if (err) throw err
          writeVersion(file, content)
        })
      }
    },
  }
}

vite 配置文件

// vite.config.js
export default defineConfig((config) => {
  const now = new Date().getTime()
  return {
    ...
    define: {
      // 定義全局變量
      __APP_VERSION__: now,
    },
    plugins: [
      ...
      versionUpdatePlugin({
        version: now,
      }),
    ],
    ...
  }
})

3.路由跳轉(zhuǎn)時,實時檢測版本

檢測到新版本自動刷新頁面,應該使用前置守衛(wèi),在跳轉(zhuǎn)失敗報錯前檢測,跳轉(zhuǎn)失敗不會觸發(fā)后置守衛(wèi)

const router = useRouter()
// 這里在路由全局前置守衛(wèi)中檢查版本
router.beforeEach(async () => {
  await versionCheck()
})

// 版本監(jiān)控
const versionCheck = async () => {
  if (import.meta.env === 'development') return
  const response = await axios.get('version.json')
  // eslint-disable-next-line no-undef
  if (__APP_VERSION__ !== response.data.version) {
    // eslint-disable-next-line no-undef
    ElMessage({
      message: '發(fā)現(xiàn)新內(nèi)容,自動更新中...',
      type: 'success',
      showClose: true,
      duration: 1500,
      onClose: () => {
        window.location.reload()
      },
    })
  }
}

總結(jié)

到此這篇關于Vite版本更新檢查實現(xiàn)頁面自動刷新的文章就介紹到這了,更多相關Vite版本更新頁面自動刷新內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Vue實現(xiàn)下拉加載更多

    Vue實現(xiàn)下拉加載更多

    這篇文章主要為大家詳細介紹了Vue實現(xiàn)下拉加載更多,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • 開發(fā)Vue樹形組件的示例代碼

    開發(fā)Vue樹形組件的示例代碼

    本篇文章主要介紹了開發(fā)Vue樹形組件的示例代碼,它展現(xiàn)了組件的遞歸使用。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • Vue2.0+Vux搭建一個完整的移動webApp項目的示例

    Vue2.0+Vux搭建一個完整的移動webApp項目的示例

    這篇文章主要介紹了Vue2.0+Vux搭建一個完整的移動webApp項目的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • Vue源碼學習defineProperty響應式數(shù)據(jù)原理實現(xiàn)

    Vue源碼學習defineProperty響應式數(shù)據(jù)原理實現(xiàn)

    這篇文章主要為大家介紹了Vue源碼學習defineProperty響應式數(shù)據(jù)原理實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • element-ui自定義message-box自定義樣式不生效的解決

    element-ui自定義message-box自定義樣式不生效的解決

    這篇文章主要介紹了element-ui自定義message-box自定義樣式不生效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Nuxt3項目搭建過程(Nuxt3+element-plus+scss詳細步驟)

    Nuxt3項目搭建過程(Nuxt3+element-plus+scss詳細步驟)

    這篇文章主要介紹了Nuxt3項目搭建(Nuxt3+element-plus+scss詳細步驟),本次記錄一次使用Nuxt3搭建前端項目的過程,內(nèi)容包含Nuxt3的安裝,基于Vite腳手架(默認)構(gòu)建的vue3項目,element-plus的安裝配置,scss的安裝,目錄結(jié)構(gòu)的創(chuàng)建和解釋,需要的朋友可以參考下
    2022-12-12
  • vue實現(xiàn)原生下拉刷新

    vue實現(xiàn)原生下拉刷新

    這篇文章主要為大家詳細介紹了vue實現(xiàn)原生下拉刷新,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • vue中實現(xiàn)點擊空白區(qū)域關閉彈窗的兩種方法

    vue中實現(xiàn)點擊空白區(qū)域關閉彈窗的兩種方法

    這篇文章主要介紹了vue中實現(xiàn)點擊空白區(qū)域關閉彈窗的兩種方法,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2020-12-12
  • vue實現(xiàn)ToDoList簡單實例

    vue實現(xiàn)ToDoList簡單實例

    這篇文章主要為大家詳細介紹了vue實現(xiàn)ToDoList簡單實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • vue路由history模式頁面刷新404解決方法Koa?Express

    vue路由history模式頁面刷新404解決方法Koa?Express

    這篇文章主要為大家介紹了vue路由history模式頁面刷新404解決方法(Koa?Express)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11

最新評論