生成器在第 7 个文件时因为模板变量缺失退出,目标目录留下 6 个文件,再跑一次报 EEXIST: file already exists。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

node bin/gen.js --module order --staging ./.gen-tmp
rm -rf ./.gen-tmp
ls src/modules/order

文件是逐个写入的,中途失败没有清理。第二次运行时存在性检查把半成品当成正常文件跳过,目录状态越来越乱。这一点先确认清楚,后面就不用反复试。

「生成器回滚」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

具体做法是,先在临时目录生成完 全部成功后再整体移动到目标位置;失败时删除临时目录 目标目录不受影响;必须原地写入时 记录本次创建的文件清单 失败后按清单回滚;把回滚写进 finally 异常路径也要执行。

改完照着核一遍,人为制造模板错误 目标目录不新增任何文件 重跑一次能正常完成。

作者 9823189