42 lines
1.6 KiB
JavaScript
Executable File
42 lines
1.6 KiB
JavaScript
Executable File
#!/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 <run|revert|show|generate> [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);
|