# 版本控制和缓存管理 ## 🎯 版本控制策略 ### 1. 版本号管理 项目使用 [语义版本控制 (Semantic Versioning)](https://semver.org/): - `MAJOR.MINOR.PATCH` (例如: 1.2.3) - **PATCH**: 向后兼容的错误修复 - **MINOR**: 向后兼容的新功能 - **MAJOR**: 不向后兼容的重大更改 ### 2. 发布命令 ```bash # 补丁版本 (0.0.7 -> 0.0.8) npm run release # 次版本 (0.0.7 -> 0.1.0) npm run release:minor # 主版本 (0.0.7 -> 1.0.0) npm run release:major # 仅构建(不更新版本号) npm run build # 单独的版本升级命令 npm run version:patch # 仅升级版本号 npm run version:minor # 仅升级版本号 npm run version:major # 仅升级版本号 ``` ## 🔧 缓存管理机制 ### 1. Service Worker 版本化 - 每次构建时,Service Worker 缓存名称包含版本号 - 新版本发布时自动清除旧版本缓存 - 开发模式禁用缓存,生产模式启用完整缓存 ### 2. 自动更新检测 - 应用每5分钟检查一次版本更新 - 发现新版本时显示更新提示 - 用户可选择立即更新或稍后更新 ### 3. 强制缓存清除 用户更新时会: 1. 清除所有浏览器缓存 2. 强制 Service Worker 更新 3. 重新加载页面获取最新资源 ## 📁 相关文件 ### 版本控制文件 - `package.json` - 版本号定义 - `scripts/safe-version-bump.js` - 智能版本升级脚本 - `scripts/update-version.js` - 版本更新脚本 - `apps/web/public/version.json` - 运行时版本信息 ### 缓存管理文件 - `apps/web/public/sw.js` - Service Worker (含版本化缓存) - `packages/drawnix/src/components/version-update/` - 版本更新组件 - `apps/web/src/main.tsx` - Service Worker 注册和更新逻辑 ## 🚀 部署流程 ### 开发环境 ```bash npm start # 启动开发服务器,禁用缓存 ``` ### 生产环境 ```bash # 1. 更新版本号并构建 npm run release # 2. 部署到服务器 # 确保 version.json 和 sw.js 都包含新版本号 ``` ## 🔍 版本检查机制 ### 1. 版本信息来源 - **当前版本**: HTML meta 标签 `` - **最新版本**: 服务器 `/version.json` 接口 ### 2. 更新触发条件 - 定时检查 (每5分钟) - Service Worker 更新事件 - 用户手动刷新 ### 3. 缓存策略 - **开发模式**: 完全禁用缓存,实时更新 - **生产模式**: 版本化缓存,自动清理旧版本 ## 🛠️ 自定义配置 ### 修改检查频率 在 `version-update.tsx` 中修改: ```javascript // 每5分钟检查一次更新 const interval = setInterval(checkForUpdates, 5 * 60 * 1000); ``` ### 修改缓存策略 在 `sw.js` 中修改缓存名称和清理逻辑: ```javascript const CACHE_NAME = `drawnix-v${APP_VERSION}`; const IMAGE_CACHE_NAME = `drawnix-images-v${APP_VERSION}`; const STATIC_CACHE_NAME = `drawnix-static-v${APP_VERSION}`; ``` ## 📊 监控和调试 ### 查看当前版本 ```javascript // 控制台中查看 console.log(document.querySelector('meta[name="app-version"]').content); ``` ### 查看缓存状态 ```javascript // 控制台中查看所有缓存 caches.keys().then(console.log); ``` ### Service Worker 调试 1. 打开 DevTools > Application > Service Workers 2. 查看当前 SW 状态和版本 3. 可手动触发更新或注销