2.3 KiB
Raw Blame History

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,然后执行:

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。