# DiffLens 应用开发与版本迭代规范 > 适用项目:DiffLens(MetonaTeam / thzxx) > 文档维护:随应用版本同步更新 --- ## 1. 版本号总规范 版本号遵循 **语义化版本(SemVer)三段式**:`x.y.z` ``` x = 主版本号(Major) y = 次版本号(Minor) z = 补丁版本号(Patch) ``` **本项目最重要的约束:** > **`x` 永远是 `0`,永远不要提升到 `1.0.0`。** > 版本迭代**只允许修改 `y` 和 `z`**,`x` 保持 `0` 不变。 当前基线版本:**`0.4.3`** --- ## 2. x / y / z 各自的含义与规则 | 段位 | 值 | 何时提升 | 举例 | | --- | --- | --- | --- | | `x` 主版本 | **恒为 `0`** | 永不提升 | 不生效 | | `y` 次版本 | `0, 1, 2, 3 …` | 新增功能 / 界面较大调整 / 构建方式变更 | `0.1.0 → 0.2.0` | | `z` 补丁 | `0, 1, 2, 3 …` | Bug 修复 / 样式微调 / 文档 / 依赖小升级 | `0.1.0 → 0.1.1` | ### 何时走 `y`(次版本升级 `0.x.z → 0.(x+1).0`) - 新增用户可见的功能特性 - UI / 交互有较大调整 - 引入新的差异能力(如导出报告、文件夹对比) - 内部引擎算法 / 数据结构的兼容性变更 ### 何时走 `z`(补丁升级 `0.x.z → 0.x.(z+1)`) - 修复 Bug、崩溃、显示异常 - 细微的样式 / 文案优化 - 文档补充、依赖补丁级升级 - 非功能性重构(不改变用户可见行为) ### 反例(禁止) - ❌ 直接跳到 `1.0.0` 或更高 - ❌ 只升 `x` 不升 `y/z` - ❌ 同时改 `y` 与 `z`(一次发布只应改动一段) --- ## 3. 版本演进示意 ``` 0.1.0 ← 初始版本(已发布) 0.1.1 ← 体验打磨补丁(已发布):拖拽编码识别 · 行级右键菜单 · 尾部换行显示修正 0.2.0 ← 导出差异报告(已发布):HTML / 纯文本 / Markdown 三种格式 0.2.1 ← 建立测试体系(已发布):Vitest 单元+组件测试 · 测试策略文档 0.2.2 ← 体验打磨(已发布):拖拽处处可用 · 手动粘贴对比 · 导出后一键定位 · 报告/可读性增强 · 仅限文本文件 0.2.3 ← 安装器优化(已发布):NSIS 向导式安装,支持手动选择安装目录 0.2.4 ← 健壮性与体验打磨(已发布):读取容错与 10MB 大文件防护 · 横向滚动同步 · 下拉点击外部/Esc 关闭 · 二进制误判预警 0.2.5 ← 一致性与边角修复(已发布):右键菜单边缘防溢出 · 粘贴入口 10MB 防护 · 拖拽读取失败提示 · 多文件拖拽提示 · 剪贴板统一走主进程 · 主进程异步读取 0.2.6 ← 主进程异步收尾与边角防护(已发布):保存报告异步写盘 · 拖拽解码 handler 异步化 · 空白粘贴拦截 · 超多行卡顿预警 · 清理 mac 无效签名配置 · 文档与测试同步 0.3.0 ← 大文件性能与差异导航增强(已发布):自研虚拟滚动 · 仅看差异过滤(折叠提示行) · F7/Shift+F7 导航快捷键 · 交换左右侧 · 忽略空行 0.3.1 ← 稳健性与测试补强(已发布):超长单行词级 diff 防护 · 打开对话框补“所有文件”筛选 · 虚拟滚动 minWidth 测试覆盖 · 滚动同步去锁化重构 0.3.2 ← 报告对齐与性能收尾(已发布):纯文本报告行号右对齐 · 超长行列宽封顶防卡顿 · 对话框与拖拽扩展名清单对齐 · 右键菜单打开时导航快捷键守卫 · 清理导出死属性 0.4.0 ← 差异计算 worker 化(已发布):大文件 diff 移入 Worker 后台计算不阻塞界面 · 输入去抖与过期任务丢弃(终止重建实现取消) · 小输入同步快路径 · 无 Worker 环境回退 · 计算中遮罩与导出禁用 0.4.1 ← worker 创建开销优化与文档对齐(已发布):worker 延迟至去抖到期才创建(去抖期内取消零创建开销,无 Worker 回退同样走去抖) · 质量门禁文档补 npm test · README 架构树补 hooks · Markdown 报告标题移出引用块 · 安装包排除开发期文件 0.4.2 ← 导出菜单溢出修复与报告可读性重设计(已发布):底部工具栏导出菜单改向上弹出(修复超出窗口底边选不到) · HTML 报告全新设计(Hero 概览/人话结论/文件卡片/统计卡/图例/差异分块目录/相同段折叠可展开/打印亮色/窄屏适配,零 JS) · TXT 与 Markdown 报告头部补人话结论 0.4.3 ← 忽略所有空白比较选项与报告选项说明(当前):新增“忽略所有空白”开关(行内空格/制表符/全角空格不参与判等,展示仍为原文,换行结构仍参与对比) · 三种报告头部新增“比较选项”说明行(HTML 为 Hero 区徽标) 0.5.0 ← 新增功能(候选:主进程解码 worker 化 · Playwright E2E · 文件夹对比) ... 0.y.z ← 长期停留,永不进入 1.x ``` --- ## 4. 应用命名约束(三重一致) 交付给用户的所有可见名称必须统一为 **DiffLens**: | 环节 | 名称 | | --- | --- | | 安装包文件名 | `DiffLens-{version}-setup.exe` | | 安装后主程序 | `DiffLens.exe` | | 开始菜单 / 桌面快捷方式 | `DiffLens` | | 窗口标题 | `DiffLens` | | 工程内部 name / productName | `DiffLens` | > 注:`appId` 为内部安装标识(如 `com.metonateam.difflens`),不展示给用户,不受此约束。 --- ## 5. 开发流程 ``` 需求确认 → 方案权衡 → 开发实现 → 本地自测 → 类型检查 → 生产构建 → 代码评审 → 合并 → 发布 ``` 1. **需求确认**:明确目标,先梳理全貌,避免返工 2. **方案权衡**:涉及取舍时列出利弊,由负责拍板 3. **开发实现**:聚焦需求本身,不过度设计 4. **本地自测**:`npm run dev` 运行验证 5. **质量门禁**:见第 7 节 6. **发布**:见第 8 节 --- ## 6. 分支与合并规范 - `main`:唯一稳定主干,始终可运行、可发布 - 功能分支:`feature/<功能名>` - 修复分支:`fix/<问题描述>` ``` main └─ feature/xxx → (评审后合并回 main) ``` 合并且无二次改动时,才允许 rebase 保持历史整洁;否则用普通合并提交。 --- ## 7. 质量门禁(提交/推送前必须通过) 每次提交与推送前执行: ```bash npm run typecheck # 类型检查(node + web 双端) npm test # Vitest 单元 + 组件测试(覆盖率 80% 硬门禁) npm run build # 生产构建(main/preload/renderer 三端) ``` > 任一命令失败则禁止提交;修复通过后再提交。与《测试策略与方案》第 7 节保持一致。 --- ## 8. 发布流程 ```bash npm run build:win # Windows NSIS 安装包(在 Windows 上) ``` 发布前 checklist: 1. 更新 `package.json` 的 `version` 到新的 `0.y.z` 2. 更新本文件第 3 节演进记录 3. 通过质量门禁(typecheck + build) 4. 打标签并推送到远程 `git.metona.cn/MetonaTeam/DiffLens` 5. 如需发布安装包,生成对应平台产物与 Release 说明 --- ## 9. 元信息维护表 | 文件 | 维护内容 | | --- | --- | | `package.json` | `version`(唯一版本来源)、`name`、`productName` 保持 DiffLens | | `electron-builder.yml` | `productName` / `executableName` / `artifactName` 保持 DiffLens | | `README.md` | 特性描述与发布版本号随版本同步 | | 本文件 | 第 3 节演进记录同步补写 | > 版本号**只以 `package.json` 的 `version` 为唯一来源**,其余打包产物名由它派生。 --- ## 附:提交信息格式 采用约定式提交: ``` : <描述> feat: 新增功能 (配 y 版本) fix: 修复问题 (配 z 版本) docs: 文档变更 build: 构建/依赖 refactor: 重构(不改行为,配 z 版本) ``` 例如: - `feat: 新增导出差异报告` → `0.2.0` - `fix: 修复 GBK 文件乱码` → `0.1.1` --- © 2026 MetonaTeam · thzxx · DiffLens