# Database migrator dependencies 此目录只为一次性数据库工具提供依赖,不安装完整应用依赖,也不改变生产迁移、备份和恢复的授权门禁。 | 依赖 | 用途 | | --- | --- | | `@prisma/client` | 迁移前后的数据库结构、身份核验;团队职能 seed 查询与写入 | | `prisma` | 执行 `prisma migrate deploy` 及所需的原生 schema engine | | `tsx` | 执行现有 TypeScript 团队职能 seed,不复制 TypeScript 编译器 | | `zod` | 复用团队职能输入校验 | 独立 lock 从根 `package-lock.json` 提取完整依赖闭包,保留精确版本、下载来源、integrity 和嵌套路径。Prisma CLI 使用自身锁定的 5.22 引擎,不使用应用根目录的另一版本引擎。生成器会检查直接依赖版本;新增可选 peer 也必须先人工核对,不能静默省略。 根 lock 更新后,先检查这四个依赖的实际锁定版本是否变化;有变化时审核兼容性并同步本目录 `package.json`,然后执行: ```sh node scripts/database-migrator-lock.mjs --write node scripts/database-migrator-lock.mjs --check node --test scripts/database-migrator-lock.test.mjs scripts/safe-production-migrate.test.mjs ``` 审核独立 lock 的差异后重新构建 `migrator`。构建过程先执行 `--check`,根 lock 与独立 lock 不一致时直接失败,不重新解析版本。 Docker 的独立依赖阶段先安装 OpenSSL 3,再执行 `PRISMA_SKIP_POSTINSTALL_GENERATE=1 npm ci`,将匹配 Alpine 的 `schema-engine-linux-musl-openssl-3.0.x` 打包。该变量仅跳过此无 schema 目录中多余的 Client 自动生成;`@prisma/engines` 的安装脚本照常执行。生成的 Prisma Client 从同次应用 builder 的 `.prisma` 目录复制,保证与相同版本的 schema 一致。最终镜像以 `node` 用户运行,代码和引擎归 root 所有,并在断网条件下执行 Prisma CLI 验证,避免运行时下载引擎。 团队职能 seed 仍复用项目原有权限、花名册及数据写入逻辑。镜像只复制其 13 个 `lib` 源文件;测试解析脚本的完整导入关系,检查复制列表及外部依赖。修改 seed 的导入关系后,必须重新审核这一依赖闭包。备份工具继续依赖系统提供的 `pg_dump`、`pg_restore` 和 `psql`。