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

純前端實(shí)現(xiàn)發(fā)布新版本主動(dòng)檢測(cè)更新提醒方案

 更新時(shí)間:2026年03月30日 09:41:40   作者:Ticnix  
快速迭代的軟件開(kāi)發(fā)環(huán)境中,前端應(yīng)用的更新頻率日益加快,為了確保用戶(hù)能夠享受到最新的功能和修復(fù),開(kāi)發(fā)者需要設(shè)計(jì)一套高效的更新提醒機(jī)制,這篇文章主要介紹了純前端實(shí)現(xiàn)發(fā)布新版本主動(dòng)檢測(cè)更新提醒的相關(guān)資料,需要的朋友可以參考下

前言

前端項(xiàng)目發(fā)布新版本后,若用戶(hù)已打開(kāi)頁(yè)面或?yàn)g覽器掛在后臺(tái),由于單頁(yè)應(yīng)用 (SPA) 的機(jī)制,頁(yè)面不會(huì)主動(dòng)刷新,導(dǎo)致用戶(hù)一直停留在舊版本,無(wú)法使用新功能或遇到已修復(fù)的 Bug

那在開(kāi)發(fā)過(guò)程中很容易遇到過(guò)這種問(wèn)題,當(dāng)我把前端寫(xiě)好的新版本的代碼進(jìn)行打包上傳,這個(gè)動(dòng)作已經(jīng)進(jìn)行了版本更新了,但是用戶(hù)在訪問(wèn)舊版本網(wǎng)頁(yè)時(shí)如果沒(méi)有點(diǎn)擊刷新,根本不知道已經(jīng)上新了新版本,而且如果新版本已經(jīng)取消了某個(gè)功能,但用戶(hù)用舊版本進(jìn)行提交必然會(huì)出錯(cuò)

那么就需要一個(gè)主動(dòng)檢測(cè)版本更新的功能提醒用戶(hù)更新了

效果

實(shí)現(xiàn)過(guò)程

1. 構(gòu)建階段:在打包時(shí)生成一個(gè)包含當(dāng)前時(shí)間戳的唯一版本標(biāo)識(shí)文件 (version.json)。

2. 部署階段:Nginx 配置該文件禁止緩存,確保前端永遠(yuǎn)獲取到最新?tīng)顟B(tài)。

3. 運(yùn)行階段:前端代碼通過(guò)輪詢(xún)和頁(yè)面可見(jiàn)性檢測(cè),對(duì)比本地與服務(wù)器的版本號(hào)。

實(shí)現(xiàn)邏輯如下

構(gòu)建腳本改造 (生成版本號(hào))

我們需要在每次 npm run build 時(shí),在輸出目錄(通常是 dist 或 public)生成一個(gè) version.json。

在項(xiàng)目根目錄新建腳本文件 generate-version.js:

import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';
// 獲取當(dāng)前模塊的路徑
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
// 定義版本號(hào) 
const versionInfo = {
  version: Date.now(),
  releaseTime: new Date().toLocaleString()
};
// 確定輸出路徑 
const outputDir = path.join(__dirname, 'public');
// 先寫(xiě)入 public 目錄,打包時(shí)會(huì)自動(dòng)復(fù)制到 dist
const filePath = path.join(outputDir, 'version.json');
// 寫(xiě)入文件
fs.writeFileSync(filePath, JSON.stringify(versionInfo, null, 2));
console.log(`? [Version] 版本文件已生成: ${filePath}`);
console.log(`? [Version] 當(dāng)前版本標(biāo)識(shí): ${versionInfo.version}`);

前端自動(dòng)檢測(cè)邏輯

在項(xiàng)目的主入口文件(如 src/App.vue, src/App.jsx, src/main.js)中引入以下邏輯。

/**
 * 前端版本自動(dòng)檢測(cè)模塊
 */
// 存儲(chǔ)本地版本號(hào)
let localHash:any = null;
// 檢測(cè)間隔 (毫秒),建議 60秒 或 5分鐘
const CHECK_INTERVAL = 5 * 1000;
async function checkAppVersion() {
  try {
    // 1. 請(qǐng)求 version.json
    // 必須加上時(shí)間戳參數(shù) t=... 防止瀏覽器緩存這個(gè) GET 請(qǐng)求本身
    const res = await fetch(`/version.json?t=${Date.now()}`);
    if (!res.ok) throw new Error('Version file not found');
    const data = await res.json();
    const serverHash = data.version;
    // 2. 首次加載,只記錄不比對(duì)
    if (!localHash) {
      localHash = serverHash;
      console.log(`-----------------------[Updater] 當(dāng)前版本已鎖定-----------------------: ${localHash}`);
      return;
    }
    // 3. 比對(duì)版本
    if (serverHash !== localHash) {
      console.log(`-----------------[Updater] 檢測(cè)到新版本------------------------: ${serverHash} (當(dāng)前: ${localHash})`);
      showUpdateNotification();
    }
    console.log(`----------------------[Test] 執(zhí)行檢測(cè)-----------------------: ${localHash}`);
  } catch (err) {
    // 靜默失敗,不打擾用戶(hù) (可能是網(wǎng)絡(luò)波動(dòng))
    console.warn('---------------------[Updater] 版本檢測(cè)失敗:--------------------------', err);
  }
}
function showUpdateNotification() {
  import('element-plus').then(({ ElMessageBox }) => {
    ElMessageBox.confirm(
      '系統(tǒng)檢測(cè)到有新版本發(fā)布,請(qǐng)點(diǎn)擊"確定"刷新頁(yè)面以獲取最新功能。',
      '版本更新提示',
      {
        confirmButtonText: '立即刷新',
        cancelButtonText: '稍后再說(shuō)',
        type: 'warning',
        center: true,
        modal: false 
      }
    ).then(() => {
      window.location.reload(true); // true 表示強(qiáng)制從服務(wù)器重載
    }).catch(() => {
      // 用戶(hù)點(diǎn)擊取消,不做任何操作
    });
  });
}
// --- 啟動(dòng)檢測(cè)監(jiān)聽(tīng) ---
// 1. 啟動(dòng)定時(shí)輪詢(xún)
setInterval(checkAppVersion, CHECK_INTERVAL);
// 2. 智能監(jiān)聽(tīng):當(dāng)用戶(hù)切換標(biāo)簽頁(yè)回來(lái)時(shí),立即檢查一次
document.addEventListener('visibilitychange', () => {
  if (document.visibilityState === 'visible') {
    checkAppVersion();
  }
});
// 3. 初始化檢查
checkAppVersion();

修改 package.json:

總結(jié) 

到此這篇關(guān)于純前端實(shí)現(xiàn)發(fā)布新版本主動(dòng)檢測(cè)更新提醒方案的文章就介紹到這了,更多相關(guān)前端主動(dòng)檢測(cè)更新提醒內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

临西县| 囊谦县| 深州市| 内乡县| 根河市| 东方市| 义马市| 清苑县| 大宁县| 民县| 万山特区| 封丘县| 南华县| 前郭尔| 西峡县| 崇仁县| 马龙县| 安塞县| 泽普县| 麟游县| 化州市| 昌乐县| 鲁山县| 任丘市| 林芝县| 山东省| 镇赉县| 普兰县| 哈尔滨市| 郯城县| 东乡| 南雄市| 西乌珠穆沁旗| 达拉特旗| 承德县| 泌阳县| 遂宁市| 黔南| 托克托县| 蓬莱市| 仁寿县|