评估与合并模板更新
明确更新目标,通过旧模板、新模板和业务项目的差异保留定制并引入需要的修改。
本篇用于以后出现明确更新需求时参考。当前模板没有为定制项目自动合并源码的工具,也不需要为了阅读本文而立即更新现有项目。
一、先说明为什么需要这次更新
开始前写清楚三个问题:希望解决什么、准备采用哪个版本或提交、哪些业务必须保持原来的行为。
例如“引入某次邮件发送修复,保持现有注册规则和邮件文案”,比“同步最新模板”更容易评估和验证。只有目标明确,才能判断哪些变化必要,哪些变化可以留在以后处理。
| 信息 | 记录方式 |
|---|---|
| 应用当前状态 | 分支、提交 ID、应用版本、未提交修改 |
| 原始模板来源 | 初始化时模板版本、标签、提交或源码包记录 |
| 目标来源 | 本次要采用的具体标签、提交或可确认版本的源码包 |
| 涉及范围 | 功能、依赖、配置、数据、外部服务 |
| 验收结果 | 原问题如何消失,旧功能如何继续工作 |
模板版本与应用版本分别记录。修改应用的 package.json.version 不会执行源码或数据库升级,升级 CLI 也不会修改已经生成的应用。
二、保留当前工作状态
有具体升级计划时,再为它准备独立分支或副本。先检查现有工作,不要把自己的未完成修改和模板更新混在一次大改动里。
git status --short
git log -5 --oneline
git diff --stat这些命令只读取状态。确认已有修改已经妥善保存后,再创建专门用于评估和合并的分支。Git 分支只能保存已经提交的代码,不会备份 D1、上传文件、Secret 或第三方平台设置。
保留原项目目录,不要将新版 ZIP 直接解压覆盖进去,也不要把重新执行 saavo create 当作原地升级。
三、比较三份内容
理想情况下同时保留:
| 内容 | 用途 |
|---|---|
| 初始化时的旧模板 | 识别自己从哪里开始 |
| 准备采用的新模板 | 识别上游实际修改 |
| 当前业务项目 | 识别自己的定制与已有数据约束 |
先比较“旧模板到新模板”,看清上游变化,再比较“旧模板到业务项目”,看清自己的修改。最后决定如何把上游变化应用到当前业务。
如果自己的仓库与模板没有共同 Git 历史,应使用目录比较或补丁逐项处理,不要为了让合并命令运行而强行拼接无关历史。只有确认存在可用的共同历史和可靠远程来源时,Git 合并才有明确基础。
旧模板来源不明时,可以结合项目初始提交、下载记录和文件内容缩小范围。无法确认的部分应记录为不确定,不能把任意一个较旧版本当作真实起点。
初始化本身会产生差异
CLI 会修改项目名、应用版本以及 Worker、D1、R2、Queue 的资源名称。正式部署后还会写入账户、资源 ID 和生产地址。发布源码包也会移除 package-lock.json 和维护者专用的 commit script。
这些差异不一定是遗漏或错误。比较时保留自己的项目身份和远程绑定,不要用新模板的占位配置替换已经投入使用的资源。
四、按关联模块合并
| 变化位置 | 一起检查的内容 |
|---|---|
src/core/、src/api/ | 领域类型、数据库访问、业务规则、DTO、调用页面和测试 |
config/ | Schema、读取代码、业务 Key 和原有配置值 |
schema/ | 旧库迁移路径、新建项目初始化路径 |
package.json | 依赖约束、脚本、运行环境要求 |
wrangler.jsonc | 原项目资源身份、新增绑定、队列和定时入口 |
example.vars | 变量用途、读取位置、开发和生产是否都需要 |
locales/、content/ | 新文案键、导航、语言配置和项目自己的内容 |
发生冲突时,理解两边的业务意图后再合并。比如上游增加一种邮箱校验,并不意味着应直接覆盖项目已有的注册策略,也不能因为保留旧代码就漏掉校验依赖的安全修复。
涉及数据库访问时,保持 schema → core/db → core/repositories → service → API → UI 的职责边界。不要为了尽快消除冲突,让页面直接读取数据库类型或让 API 临时拼 SQL。
选择性合并时,跟踪所需的关联变更。一个修复可能同时增加新字段、迁移、配置项和测试,只复制 Handler 容易留下运行时缺口。
五、单独处理依赖变化
先合并需要的依赖声明,再通过项目使用的包管理器生成一致的锁文件。不要手工拼接锁文件,也不要把依赖升级顺便扩大成所有包的最新版本更新。
当 package.json 有经过评估的依赖变化时,可运行:
npm install检查生成的锁文件差异,确认没有与本次目标无关的大面积升级。后续在干净环境中按已提交锁文件安装,可以使用 npm ci。
若上游提高 Node.js 要求,还需要同步开发环境、构建环境和持续集成设置。检查项目 engines、脚本与依赖要求,而不是只看模板某一份旧说明。
六、先证明本地行为正确
完成必要合并后,根据本次修改执行检查。配置可以先用 npm run doctor 查看,Binding 有变化时重新生成类型。只有确实准备了数据库变更,才执行相应迁移验证。
代码合并完成后运行:
npm run verify这会执行规范检查、类型检查、测试和构建。检查通过后还要复现本次要解决的问题,并验证相邻流程,例如修复支付回调后检查重复投递和权益发放,而不只是打开首页。
出现与本次合并无关的原有失败时,应记录并区分来源,不要悄悄放宽测试或删除校验让命令通过。
七、形成可评审的更新范围
发布前应能清楚回答:引入了哪些上游变化、保留了哪些业务差异、是否需要数据或配置迁移、测试了什么、失败后如何恢复。