feat(web): T-WEB-010 部署脚本(Docker Compose,不含 MySQL)

This commit is contained in:
2026-09-14 19:00:55 +08:00
parent 640736c77b
commit 5a8b77b0a4
8 changed files with 475 additions and 0 deletions
+41
View File
@@ -0,0 +1,41 @@
#!/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);