feat(web): T-WEB-010 部署脚本(Docker Compose,不含 MySQL)
This commit is contained in:
Executable
+41
@@ -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);
|
||||
Reference in New Issue
Block a user