27 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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`。