VersionChecker 检测网站更新
主要功能
一个用于 Vue 网站的智能版本检测插件,能够自动检测网站更新并提示用户刷新页面。
- 🚀 自动版本检测 - 轮询检查版本更新
- 📱 智能提示 - 检测到更新时自动提示用户
- ⚡ 灵活配置 - 支持自定义检测间隔和回调函数
- 🔧 多种使用方式 - 支持 Vue 插件方式和独立函数调用
- 🎯 精确状态反馈 - 提供详细的检测结果状态
使用方法
首先不管是哪种使用方式,都需要在打包构建时生成版本信息文件。可以通过引入 devecouiVersionPlugin 插件来来实现:
在我们的 vite.config.ts 文件中进行如下配置:
typescript
import { fileURLToPath, URL } from 'node:url'
import { defineConfig ,type Plugin} from 'vite'
import vue from '@vitejs/plugin-vue'
import vueDevTools from 'vite-plugin-vue-devtools'
import {devecouiVersionPlugin} from 'devecoui-plus/vite-plugin' // 只需要引入这两句
export default defineConfig({
plugins: [
vue(),
vueDevTools(),
devecouiVersionPlugin() as Plugin, // 只需要引入这两句
],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
},
}
})作为 Vue 插件使用
typescript
import { createApp } from 'vue'
import App from './App.vue'
import { VersionChecker } from 'devecoui-plus/vite-plugin'
const app = createApp(App)
// 基本使用(使用默认配置)
app.use(VersionChecker)
// 进阶使用(自定义配置)
app.use(VersionChecker,{
enableDetection:import.meta.env.PROD,// 线上环境开启 默认开启true
interval:2000,// 默认2秒检测一次
customPrompt: () => {
ElMessageBox.confirm(
`检测到新版本,请刷新页面后使用。`,
'版本更新',
{
confirmButtonText: '刷新',
type: 'warning',
showClose: false,
closeOnClickModal: false,
closeOnPressEscape: false,
showCancelButton:false
}
).then(() => {
window.location.reload()
})
}
})
app.mount('#app')VersionChecker 插件接受一个配置对象,支持以下选项:
typescript
/**
* 插件选项接口
*/
export interface VersionCheckerOptions {
/**
* 版本信息文件的 URL,指向打包后生成的 version.json
* 默认值:'/devecoui/version.json'
* 建议与 Vite 插件生成的文件路径保持一致
*/
url?: string
/**
* 轮询检查版本的间隔时间(毫秒)
* 默认 2000ms,即每 2 秒检测一次
* 可以根据项目需求调整,比如大型网站可调长一点
*/
interval?: number
/**
* 当检测到新版本时触发的回调函数
* 优先于默认弹框行为
* 可在此回调中自定义刷新逻辑或提示 UI
*/
onUpdate?: () => void
/**
* 自定义弹框函数
* 若提供,将替代默认 confirm 弹框提示
* 可用于渲染自定义提示弹窗或 UI 组件
*/
customPrompt?: () => void,
/**
* 是否开启检测
* 默认开启 true
* 如果在开发环境下不想检测可以 使用 import.meta.env.PROD 设置为只线上环境检测
*/
enableDetection?: boolean
}手动控制
除了作为 Vue 插件使用外,我们还可以在组件中通过引入 startVersionCheck stopVersionCheck checkVersionOnce 方法来手动控制版本检测的开始和停止。
checkVersionOnce 方法会立即进行一次版本检测,而不会启动轮询。返回一个 Promise,解析为检测结果状态。具体参数如下:
入参:
typescript
interface CheckVersionOnceOptions {
/**
* 自定义弹框函数
* 若提供,将替代默认 confirm 弹框提示
* 可用于渲染自定义提示弹窗或 UI 组件
*/
customPrompt?: () => void,
/**
* 是否在有新版本的情况下显示弹框
* 默认 true
*/
showPrompt?: boolean
}结果:
typescript
enum VersionCheckResult {
FETCH_FAILED = 'fetch_failed', // 获取版本失败
UP_TO_DATE = 'up_to_date', // 当前已是最新版本
UPDATE_AVAILABLE = 'update_available' // 有新版本可用
}
interface VersionFile {
version: string; // 版本号(时间戳)
buildTime: string; // 构建时间(ISO 字符串)
}
/** 最终返回结果格式 */
interface CheckVersionOnceResult {
result: VersionCheckResult; // 检测结果
currentVersion?: string; // 当前版本(格式:version@buildTime)
newVersion?: string; // 新版本(仅在有更新时存在)
versionData?: VersionFile; // 原始版本数据
}