#!/usr/bin/env node /** * 跨环境 TypeORM migration 入口。 * * - 生产(存在 dist/db/data-source.js):使用 typeorm CLI + 编译产物,无需 ts-node * - 开发(无 dist):使用 typeorm-ts-node-commonjs + src/*.ts * * 这样 `npm run migration:run` 在本地与 Docker 容器内行为一致。 * * 用法: * node scripts/migrate.mjs run|revert|show|generate [额外参数] */ import { spawnSync } from 'node:child_process'; import { existsSync } from 'node:fs'; import { join } from 'node:path'; const command = process.argv[2]; const extra = process.argv.slice(3); if (!command) { console.error('用法:node scripts/migrate.mjs [args]'); process.exit(2); } const binDir = join(process.cwd(), 'node_modules', '.bin'); const suffix = process.platform === 'win32' ? '.cmd' : ''; const hasDist = existsSync(join(process.cwd(), 'dist', 'db', 'data-source.js')); const bin = hasDist ? `typeorm${suffix}` : `typeorm-ts-node-commonjs${suffix}`; const dataSource = hasDist ? 'dist/db/data-source.js' : 'src/db/data-source.ts'; if (!hasDist && command !== 'generate' && !existsSync(join(process.cwd(), 'node_modules', 'ts-node'))) { console.error('未找到编译产物 dist/,且未安装 ts-node。请先 npm run build。'); process.exit(1); } const args = [join(binDir, bin), '-d', dataSource, `migration:${command}`, ...extra]; console.log(`[migrate] ${bin} -d ${dataSource} migration:${command} ${extra.join(' ')}`.trim()); const result = spawnSync(args[0], args.slice(1), { stdio: 'inherit' }); process.exit(result.status ?? 1);