# version-check
**Repository Path**: ybchen292/version-check
## Basic Information
- **Project Name**: version-check
- **Description**: version-check-js极简配置的前端版本检测工具,自动判断ETag/版本文件模式,默认自动轮询,保留手动检测 。原生javascript实现。不局限于框架使用
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2026-02-12
- **Last Updated**: 2026-03-12
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# VersionCheck.js
> 一个轻量级的前端版本检测工具,支持自动轮询检测、手动检测、ETag 模式和版本文件模式,内置原生提示弹窗。支持自定义提示和回调函数。适用于任何基于 HTML 的前端项目。
[English](./README.en.md) | [Gitee](https://gitee.com/ybchen292/version-check) | [GitHub](https://github.com/ybchen292/version-check)
---
## 🌟 功能特性
- **智能双模式检测**:
- **ETag 模式**(默认):通过检测入口 HTML 文件的 `ETag` 响应头判断是否有新版本
- **版本文件模式**:通过检测指定 JSON 文件中的 `version` 字段判断是否有新版本
- **自动化检测**:默认每 10 分钟自动检测一次,可自定义间隔时间
- **灵活的手动检测**:支持主动调用检测方法
- **智能页面管理**:页面隐藏时自动暂停检测,页面显示时恢复检测
- **高度可配置**:支持自定义提示文案、更新回调、错误处理、日志处理等
- **多环境兼容**:支持 UMD 模块规范,可在 CommonJS、AMD 和浏览器全局环境中使用
- **健壮的存储机制**:自动降级 localStorage → 内存存储
- **完善的错误处理**:区分操作日志和错误日志,提供详细的错误信息
---
## 📦 安装方式
### 1. 通过 `
```
### 2. 通过 NPM 安装(Node.js 环境)
```bash
# 安装最新版本
npm install version-check-js
# 或使用 yarn
yarn add version-check-js
```
然后在代码中导入:
```javascript
// CommonJS 方式
const VersionCheck = require('version-check-js');
// ES6 模块方式
import VersionCheck from 'version-check-js';
```
### 3. 通过 unpkg CDN 引入
```html
```
---
## 🚀 快速开始
### 基础用法
```javascript
// 实例化 VersionCheck
const versionCheck = new VersionCheck({
url: '/version.json', // 指定版本文件路径(或默认使用 '/' 进入 ETag 模式)
interval: 60 * 1000, // 设置检测间隔为 1 分钟
message: '发现新版本,是否立即刷新?', // 自定义提示文案
});
// 启动自动检测
versionCheck.start();
// 停止自动检测
// versionCheck.stop();
// 销毁实例
// versionCheck.destroy();
// 手动触发一次检测
versionCheck.check().then(hasUpdate => {
console.log('是否有更新:', hasUpdate);
});
```
---
## ⚙️ 配置项详解
| 参数名 | 类型 | 默认值 | 描述 |
| ---------- | ---------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| `url` | `string` | `'/'` | 检测地址:
- 默认 `'/'`:启用 ETag 模式
- 文件路径(如 `/version.json`):启用版本文件模式 |
| `interval` | `number` | `10 * 60 * 1000`(10 分钟) | 轮询检测间隔时间(毫秒),建议不小于 30 秒 |
| `message` | `string` | `'检测到新版本,是否立即刷新?'` | 更新提示文案,仅在未设置 `onUpdate` 时生效 |
| `onUpdate` | `Function` | `null` | 自定义更新回调函数(优先级高于默认 confirm 弹窗) |
| `onError` | `Function` | `(err) => console.error('版本检测失败:', err)` | 错误回调函数,接收错误对象作为参数 |
| `onLog` | `Function` | `null` | 操作日志回调函数,用于记录正常操作信息 |
| `storage` | `Object` | `null` | 自定义存储配置(需提供 `get`、`set` 方法),默认使用 localStorage |
| `t` | `string` | `t` | 重新加载时的时间戳参数名 |
### 配置项最佳实践
```javascript
const versionCheck = new VersionCheck({
// 基础配置
url: '/api/version', // 推荐使用具体的 API 接口
interval: 5 * 60 * 1000, // 5分钟检测一次(生产环境推荐)
// 用户体验优化
message: '发现新版本可用,是否立即更新?',
// 自定义回调
onUpdate: () => {
// 自定义更新逻辑
console.log('执行更新...');
// 可以在这里添加动画、提示等
window.location.reload();
},
// 错误处理
onError: error => {
// 生产环境可以发送错误日志到监控系统
console.error('版本检测异常:', error);
},
// 操作日志
onLog: message => {
// 记录操作日志,便于调试
console.log('VersionCheck:', message);
},
});
```
---
## 🔧 完整 API 文档
### 实例方法
#### `start()`
启动自动轮询检测。
```javascript
versionCheck.start(); // 返回 undefined
```
#### `stop([isInternal])`
停止自动轮询检测。
```javascript
versionCheck.stop(); // 外部调用,会触发 onLog
versionCheck.stop(true); // 内部调用,不会触发 onLog
```
#### `check()`
手动触发一次检测,返回 Promise。
```javascript
try {
const hasUpdate = await versionCheck.check();
if (hasUpdate) {
console.log('检测到新版本!');
}
} catch (error) {
console.error('检测失败:', error);
}
```
#### `reload()`
强制刷新页面,自动处理 URL 参数去重。
```javascript
versionCheck.reload(); // 会添加时间戳参数避免缓存
```
#### `destroy()`
销毁实例,清理所有资源(定时器、事件监听器、存储引用等)。
```javascript
versionCheck.destroy(); // 实例销毁后不可再次使用
```
### 静态属性
#### `checkMode`
获取当前检测模式。
```javascript
console.log(versionCheck.checkMode); // 'etag' 或 'file'
```
#### `isRunning`
获取当前检测状态。
```javascript
console.log(versionCheck.isRunning); // boolean
```
---
## 📝 使用场景和示例
### 配合 Axios 拦截器使用
```javascript
// axios 配置
import axios from 'axios';
import VersionCheck from 'version-check-js';
const versionCheck = new VersionCheck({
url: '/api/version',
interval: 300000,
});
// 请求拦截器中进行版本检测
axios.interceptors.request.use(
async config => {
if (process.env.NODE_ENV === 'production') {
try {
await versionCheck.check().then(flag => {
console.log(flag);
});
} catch (error) {
console.warn('版本检测失败:', error);
}
}
return config;
},
error => {
return Promise.reject(error);
},
);
versionCheck.start();
```
---
## 🛠️ 高级配置和最佳实践
### 存储策略配置
```javascript
// 自定义存储适配器
const customStorage = {
get: function (key) {
try {
return localStorage.getItem(key);
} catch (e) {
// 降级到 cookie
return this._getFromCookie(key);
}
},
set: function (key, value) {
try {
localStorage.setItem(key, value);
return true;
} catch (e) {
// 降级到 cookie
return this._setToCookie(key, value);
}
},
// Cookie 操作方法
_getFromCookie: function (key) {
/* ... */
},
_setToCookie: function (key, value) {
/* ... */
},
};
const versionCheck = new VersionCheck({
storage: customStorage,
});
```
### 错误监控集成
```javascript
const versionCheck = new VersionCheck({
onError: error => {
// 发送到自定义监控接口
fetch('/api/error-report', {
method: 'POST',
body: JSON.stringify({
error: error.message,
stack: error.stack,
timestamp: Date.now(),
}),
});
},
onLog: message => {
// 记录操作日志
},
});
```
### 性能优化建议
```javascript
// 生产环境配置
const prodConfig = {
url: '/api/version',
interval: 5 * 60 * 1000, // 5分钟(避免过于频繁)
onError: error => {
// 生产环境静默处理,避免影响用户体验
console.debug('Version check error:', error.message);
},
};
// 开发环境配置
const devConfig = {
url: '/api/version',
interval: 30 * 1000, // 30秒(便于调试)
onLog: message => {
// 开发环境详细日志
console.log('🔧 VersionCheck:', message);
},
};
const versionCheck = new VersionCheck(process.env.NODE_ENV === 'production' ? prodConfig : devConfig);
```
---
## 📄 许可证
MIT License