/** * build 后把契约同步给同级的 shrimp-admin。 * * 契约的真身在这边,shrimp-admin 那份是派生物——所以是单向覆盖,跟 codegen 一个性质, * 不是"两份文件互相对齐"。admin 那份的注释头是它自己的(声明自己是副本),同步时保留。 * * 只在本地开发时生效:找不到同级 shrimp-admin(CI、别人只 clone 了这个仓库)就跳过。 * 挂在 postbuild 而不是 prepare:消费侧从 git 装本包时跑的是 prepare,不该被这事打扰。 * * 为什么要自动做:上次靠人工复制,漂了一整代没人发现—— * 副本停在旧的 json 类型、缺 object/array/fields/item/parse/refs, * 而前端对未注册类型静默回落到 string,漂移不报错、只悄悄渲染错。 */ import { existsSync } from "node:fs" import { execFileSync } from "node:child_process" import { fileURLToPath } from "node:url" const syncer = fileURLToPath(new URL("../../shrimp-admin/scripts/check-contract.mjs", import.meta.url)) if (!existsSync(syncer)) { console.log("skip: 同级没有 shrimp-admin,契约副本无从同步") process.exit(0) } try { execFileSync(process.execPath, [syncer, "--fix"], { stdio: "inherit" }) } catch { // 同步脚本自己挂了(权限、文件被占)。契约漂着不能当没事发生,让 build 失败。 console.error("❌ 契约副本同步失败,见上方输出") process.exit(1) }