当前位置: 首页 > news >正文

如何解决嵌套在公众号里面的H5页面有缓存的问题。公众号菜单的H5的域名不希望加版本号去修改

希望实现:检测是否有新的版本,如果有就自动刷新一下页面。

自动化版本注入 + 自动检测更新并刷新页面

1,scripts/set-version.js,(生成 version.json,可供供前端 fetch 使用)

// scripts/set-version.js const { writeFileSync } = require('fs'); const { execSync } = require('child_process'); function getGitCommitHash() { try { return execSync('git rev-parse --short HEAD').toString().trim(); } catch (e) { console.warn('⚠️ Git not available, using timestamp as fallback'); return 'unknown'; } } function getBuildTimestamp() { const now = new Date(); const year = now.getFullYear(); const month = String(now.getMonth() + 1).padStart(2, '0'); const day = String(now.getDate()).padStart(2, '0'); const hour = String(now.getHours()).padStart(2, '0'); const minute = String(now.getMinutes()).padStart(2, '0'); return `${year}${month}${day}-${hour}${minute}`; } const commitHash = getGitCommitHash(); const buildTime = getBuildTimestamp(); const version = commitHash === 'unknown' ? buildTime : `${commitHash}-${buildTime}`; // 写入 public/version.json(Vite 会原样复制到 dist 根目录) writeFileSync('./public/version.json', JSON.stringify({ version }, null, 2)); console.log(`✅ Build version generated: ${version}`);

2,vite.config.js(注入全局版本变量)

// vite.config.js import { defineConfig } from 'vite'; import vue from '@vitejs/plugin-vue'; import { readFileSync } from 'fs'; // 读取 version.json 获取当前版本(确保与 set-version.js 一致) let APP_VERSION = 'dev'; try { const versionFile = JSON.parse(readFileSync('./public/version.json', 'utf-8')); APP_VERSION = versionFile.version; } catch (e) { console.warn('⚠️ version.json not found, using "dev" as version'); } export default defineConfig({ define: { '__APP_VERSION__': JSON.stringify(APP_VERSION) }, plugins: [vue()], // 其他配置... });

3.src/main.js(自动检测并刷新)

// src/main.js import { createApp } from 'vue'; import App from './App.vue'; // ============================== // 🔁 自动版本检测 & 刷新逻辑 // 放在最顶部!确保早于任何组件加载 // ============================== (function autoUpdateCheck() { // 防止重复执行(如刷新后再次运行) if (window.__VERSION_CHECKED__) return; window.__VERSION_CHECKED__ = true; // 当前本地版本(由 Vite define 注入) const currentVersion = __APP_VERSION__; // 跳过开发环境(localhost / 127.0.0.1) if ( location.hostname === 'localhost' || location.hostname === '127.0.0.1' || location.protocol === 'file:' ) { console.log('[Auto Update] Skipped in development mode'); return; } // 请求最新版本(加时间戳防缓存) fetch('/version.json?t=' + Date.now()) .then(res => { if (!res.ok) throw new Error(`HTTP ${res.status}`); return res.json(); }) .then(data => { const latestVersion = data.version; if (latestVersion && latestVersion !== currentVersion) { console.log( `%c[Auto Update] New version detected!\nLocal: ${currentVersion}\nRemote: ${latestVersion}`, 'color: #4CAF50; font-weight: bold;' ); // 强制从服务器重新加载(绕过缓存) location.reload(true); } else { console.log('[Auto Update] Already up to date:', currentVersion); } }) .catch(err => { console.warn('[Auto Update] Check failed, skipping:', err.message); }); })(); // ============================== // 结束自动更新检测 // ============================== // 正常启动 Vue 应用 createApp(App).mount('#app');

4. 修改package.json构建命令

{ "scripts": { "dev": "vite", "build": "node scripts/set-version.js && vite build", "preview": "vite preview" } }

每次npm run build会先生成version.json,再构建

完成前面4个步骤就可以实现:

部署后效果

  • 用户访问https://your-domain.com/(公众号菜单链接不变)
  • 页面加载 → 自动请求/version.json
  • 若发现新版本 →静默刷新一次→ 加载最新代码
  • 用户无感知,始终使用最新版

后端可以服务端强制禁用缓存:在你的 Nginx / 服务器配置中,为以下文件禁用缓存:

# Nginx 示例 location ~* \.(html|json)$ { add_header Cache-Control "no-cache, no-store, must-revalidate"; add_header Pragma "no-cache"; add_header Expires "0"; }

确保index.htmlversion.json永不被缓存

http://www.cnnetsun.cn/news/1343680.html

相关文章:

  • DataTable学习路线
  • 芯片解密多少钱,单片机解密价格详细解析
  • 2026必备!全行业通用降AI率平台 千笔·降AIGC助手 VS 万方智搜AI
  • 【用 Java API Client 操作 Elasticsearch】
  • AI智能体中的Skills是什么?
  • 某厂Java面试实录:深度解析高并发秒杀系统、Redis原子扣减、分布式锁与消息可靠性
  • Pandas加载Avro文件
  • sdut-程序设计基础Ⅰ-23级转专业第一次机测题
  • python运算符
  • 深入理解 AI Agent 中的 Skills:让 AI 拥有专业能力的秘密武器
  • 深度解析 pprof 的采样机制:它是如何在不影响性能的前提下捕获堆栈快照的?
  • 密码学加解密实训(Base64转义)
  • python股票数据分析预测系统 大模型股票行情预测系统 量化交易分析预测系统
  • Linux系统
  • 腾讯版「龙虾」Workbuddy上线当天,我用它搭了一套行业情报日报系统
  • 图表替代文字降AI率不会?看完这篇5分钟学会
  • AI Image Background Remover Pro
  • Python绘制带自动缩放的线条、多边形和规则多边形集合图
  • java面试题总结2
  • 老周虾扯:解构 AI 记忆构建长效 Agent 的底层逻辑与认知体系
  • 大数据建模中的混沌工程:测试系统弹性的方法
  • 深入解析UniAD架构:面向决策规划的端到端自动驾驶Transformer模型全景报告
  • C/C++: 栈包含哪些数据信息
  • 加解密篇 - 非对称加密算法 (RSA、DSA、ECC、DH)
  • 如何使用SQuAD Explorer:探索自然语言理解的终极指南
  • 探索稳定扩散之卓越:Awesome Stable Diffusion
  • 【亲测免费】 WunderGraph 开源项目教程
  • 开源项目 `path` 使用教程
  • 开源项目推荐:Polyfill Library
  • TrackEval:终极多目标跟踪评估工具,HOTA指标轻松掌握!