一个用于实时检测 web 应用更新的 JavaScript 库

一个用于实时检测 web 应用更新的 JavaScript 库

概述

在现代 web 应用开发中,前端代码的更新频率较高,尤其是单页应用(SPA)。当应用发布新版本时,如何及时通知用户并引导其刷新页面以加载最新资源,成为了一个亟待解决的问题。version-polling 库应运而生,旨在提供一种简单高效的方式来检测前端应用的版本更新,并提示用户进行页面刷新。官网

适用场景

用户在浏览器中打开某 web 应用(通常是后台管理系统)很长时间且未刷新页面时,如果应用有新功能添加或问题修复,用户可能无法及时知道有新版发布。这样会导致用户继续使用旧版,影响用户体验和数据准确性,甚至出现程序报错。

功能特性

  • 针对前端 web 单页应用(SPA)而设计

  • 纯前端技术实现,使用简单无需后端支持

  • 提供三种版本控制方式

    1. 使用 HTTP ETag 作为版本标识符
    2. 使用 chunkHash 作为版本标识符 v1.3.0
    3. 使用 version.json 文件管理版本号 v1.3.0
  • 支持 TypeScript

浏览器兼容性

适用于支持原生 ES Modules 的浏览器

复制代码
chrome >= 87
edge >= 88
firefox >= 78
safari >= 14

安装

  • 通过 npm 引入,并通过构建工具进行打包
bash 复制代码
# 本地项目安装
npm install version-polling --save
  • 通过 CDN 方式引入,直接插入到 HTML
html 复制代码
<script src="https://unpkg.com/version-polling/dist/version-polling.min.js"></script>

使用参考前端静态 HTML 页面自动检测更新示例

使用示例

新建一个名为 autoUpdate.js

js 复制代码
// autoUpdate.js
// 在应用入口文件中使用: 如 main.js, app.jsx
import { createVersionPolling } from "version-polling";

createVersionPolling({
  eventTriggerList: ["myAutoUpdateEvent"],
  silent: process.env.NODE_ENV === "development", // 开发环境下不检测
  onUpdate: (self) => {
    // const result = confirm('页面有更新,点击确定刷新页面!');
    // if (result) {
    self.onRefresh();
    // } else {
    // 	self.onCancel();
    // }
  },
});

// 在需要检测更新的页面中触发事件
// 路由跳转后执行
router.afterEach((to, from) => {
  // 监听到服务端前端站点更新了,执行页面刷新
  dispatchEvent(new CustomEvent("myAutoUpdateEvent"));

  // 处理生命体征不在生命体体征模块时,返回首页或者进入系统配置是去除本地缓存,然后进入体征总览执行相关的操作
  if (to.path?.indexOf(signSystemFlag) === -1) {
    sessionStorage.removeItem("vitalSign_manualGetData");
  }
});
相关推荐
刘发财3 小时前
弃用html2pdf.js,这个html转pdf方案能力是它的几十倍
前端·javascript·github
牛奶5 小时前
2026年大模型怎么选?前端人实用对比
前端·人工智能·ai编程
牛奶5 小时前
前端人为什么要学AI?
前端·人工智能·ai编程
Kagol8 小时前
🎉OpenTiny NEXT-SDK 重磅发布:四步把你的前端应用变成智能应用!
前端·开源·agent
GIS之路9 小时前
ArcGIS Pro 中的 notebook 初识
前端
JavaGuide9 小时前
7 道 RAG 基础概念知识点/面试题总结
前端·后端
ssshooter10 小时前
看完就懂 useSyncExternalStore
前端·javascript·react.js
格砸10 小时前
从入门到辞职|从ChatGPT到OpenClaw,跟上智能时代的进化
前端·人工智能·后端
Live0000011 小时前
在鸿蒙中使用 Repeat 渲染嵌套列表,修改内层列表的一个元素,页面不会更新
前端·javascript·react native
柳杉11 小时前
使用Ai从零开发智慧水利态势感知大屏(开源)
前端·javascript·数据可视化