用途:把应用从已安装的 @opencoredev/email-sdk 版本迁移到用户指定的目标版本(默认最新稳定版),属于发现加编辑的工作流,不是固定 codemod。
必要用法:先读应用 package manifest 与 lockfile 确认已安装版本;再查看已安装包的 exports、README、dist/*.d.ts;在 SDK 仓库内则查看 packages/email-sdk/src/index.ts、types.ts、core.ts、errors.ts 及 apps/fumadocs/content/docs/guides/migrate/。跨越每个大版本都要读对应迁移指南,声明与文档冲突时以已安装声明为准。
审计:在应用根目录运行 node path/to/email-sdk-migrate/scripts/audit.mjs . ,把结果当线索逐处检查调用点,不要盲目替换无关代码中的通用词。还要查找再导出 SDK 类型的包装模块、持久化旧消息结构的队列负载、断言旧结果别名或错误类的测试、读取 event.provider 的 hooks/中间件/插件、重复旧字段的运行时校验 schema,以及被复制进应用的文档示例。
按依赖顺序改动:更新导入和显式公开类型;更新客户端构造与适配器术语;更新重试、回退、幂等、头部和日期形状;用 sendMany 替换独立批次,用 sendPersonalized 替换逐收件人变量;更新结果处理和封闭错误联合;更新 hooks、中间件、插件、队列负载、测试与本地文档;最后移除临时兼容导入。无法原子迁移时才用 @opencoredev/email-sdk/compat,并记录所有剩余兼容警告为迁移债务,不能把 compat 子路径作为长期集成。
保持投递语义:除非明确接受重复投递,否则未知投递保持停止回退;跨队列重试与适配器回退保留幂等键;确认每个回退适配器支持用到的字段与能力;持久调度、排队、取消与去重保留在宿主应用或持久集成中,不要用进程内定时器替代原生 sendAt。迁移期间未经用户单独批准指定测试收件人,不得发送真实邮件。
验证与报告:导入/类型改动后跑类型检查;行为改动后跑聚焦邮件测试;用 email-sdk doctor 检查配置,用 email-sdk send --dry-run 做无网络消息校验;为 retry、fallback、生命周期行为补充或更新 memoryAdapter、failingAdapter、capturePlugin 测试;最后跑仓库完整构建测试门禁。报告已安装与目标版本、变更文件、移除的旧接口、遗留 /compat 使用、需产品评审的行为变化、验证命令与结果、以及刻意未执行的实时检查。
资源:scripts/audit.mjs 扫描常见 v0 API 写法并给出文件行号证据;当前托管迁移索引为 https://email-sdk.dev/docs/guides/migrate ;当前包技能为 skills/email-sdk/SKILL.md。其余细节暂未提供。