# 版本检测组件 (VersionChecker)
## 功能说明
`VersionChecker` 是一个自动版本检测组件,用于检测应用是否有新版本可用,并在检测到新版本时提示用户更新。
## 主要特性
- ✅ **自动检测**:应用启动时自动开始版本检测
- ✅ **定时检查**:可配置检查间隔(默认 1 分钟)
- ✅ **智能提示**:检测到新版本时显示友好的更新提示
- ✅ **防重复**:可配置通知冷却时间,避免频繁提示
- ✅ **页面感知**:页面隐藏时暂停检查,显示时恢复检查
- ✅ **资源清理**:页面卸载时自动清理定时器
- ✅ **错误处理**:网络错误时不会影响应用正常运行
## 使用方法
### 基本使用
```tsx
import VersionChecker from '@/components/VersionChecker';
const App = () => {
const currentBuildTime = process.env.REACT_APP_BUILD_TIME;
return (
{/* 你的应用内容 */}
);
};
```
### 高级配置
```tsx
```
## 参数说明
| 参数 | 类型 | 必填 | 默认值 | 说明 |
| ---------------------- | ------------------ | ---- | -------- | -------------------- |
| `currentBuildTime` | `string \| number` | ✅ | - | 当前应用的构建时间戳 |
| `checkInterval` | `number` | ❌ | `60000` | 检查间隔(毫秒) |
| `notificationCooldown` | `number` | ❌ | `300000` | 通知冷却时间(毫秒) |
## 工作原理
1. **版本信息获取**:通过 `fetch('/version.json')` 获取远程版本信息
2. **版本比较**:比较远程 `buildTimestamp` 与本地 `REACT_APP_BUILD_TIME`
3. **更新提示**:当远程时间戳大于本地时间戳时,显示更新通知
4. **用户操作**:用户可选择立即更新或稍后提醒
## 版本信息格式
组件期望的 `version.json` 文件格式:
```json
{
"productId": "go-pmp",
"version": "1.0.0 build:ABC123(UTC+8 北京时间: 2024-01-15 14:30:25)",
"buildTime": "2024-01-15 14:30:25",
"buildTimestamp": 1705302625,
"environment": "prod"
}
```
## 通知样式
更新通知使用 Ant Design 的 `notification` 组件,包含:
- **标题**:发现新版本
- **描述**:检测到新版本 v{version},建议刷新页面获取最新功能
- **操作按钮**:
- 立即更新:刷新页面
- 稍后提醒:关闭通知
## 环境变量要求
确保在构建时设置了 `REACT_APP_BUILD_TIME` 环境变量:
```bash
# 构建时设置
REACT_APP_BUILD_TIME=1705302625 npm run build
```
## 注意事项
1. **网络环境**:需要能够访问 `/version.json` 文件
2. **缓存控制**:请求时添加时间戳参数避免缓存
3. **错误处理**:网络错误不会影响应用正常运行
4. **性能考虑**:检查频率不宜过高,建议 1 分钟以上
5. **用户体验**:通知冷却时间建议设置合理,避免频繁打扰
## 调试
在浏览器控制台中可以看到详细的日志信息:
```
版本检查已启动,检查间隔: 60秒
获取到版本信息: {productId: "go-pmp", version: "1.0.0", ...}
版本检查 - 远程构建时间: 1705302625
版本检查 - 本地构建时间: 1705300000
检测到新版本可用
```
## 故障排除
### 1. 版本检测不工作
- 检查 `REACT_APP_BUILD_TIME` 环境变量是否正确设置
- 检查 `/version.json` 文件是否可以正常访问
- 查看浏览器控制台是否有错误信息
### 2. 频繁提示更新
- 调整 `notificationCooldown` 参数
- 检查版本信息中的 `buildTimestamp` 是否正确
### 3. 检测不到新版本
- 确认远程 `version.json` 文件已更新
- 检查 `buildTimestamp` 字段是否存在且为数字类型