#!/bin/bash # TypeORM 迁移创建自动化脚本 # # 用法: pnpm run migration:create -- -n MigrationName # # 功能: # 1. 调用 TypeORM CLI 生成迁移文件 # 2. 自动更新 migrations/index.ts Barrel 文件 # 3. 自动更新 src/data-source.ts 的 migrations 数组 set -e # 遇到错误立即退出 # 获取迁移名称参数 MIGRATION_NAME="${1:-}" if [ -z "$MIGRATION_NAME" ]; then echo "错误:请提供迁移名称" echo "用法: pnpm run migration:create -- -n MigrationName" exit 1 fi echo "==========================================" echo "TypeORM 迁移创建工具" echo "==========================================" echo "迁移名称: $MIGRATION_NAME" echo "" # 进入 server 目录 cd "$(dirname "$0")/.." # 1. 调用 TypeORM CLI 生成迁移文件 echo "步骤 1: 生成迁移文件..." pnpm exec typeorm-ts-node-commonjs migration:generate -d src/data-source.ts -n "$MIGRATION_NAME" # 查找新生成的迁移文件 MIGRATION_FILE=$(find migrations -name "*.ts" -type f | grep -v index.ts | tail -1) if [ -z "$MIGRATION_FILE" ]; then echo "错误:未找到生成的迁移文件" exit 1 fi echo "生成的迁移文件: $MIGRATION_FILE" # 提取迁移类名(不含扩展名) MIGRATION_CLASS=$(basename "$MIGRATION_FILE" .ts) # 2. 更新 migrations/index.ts Barrel 文件 echo "" echo "步骤 2: 更新 migrations/index.ts..." if ! grep -q "$MIGRATION_CLASS" migrations/index.ts 2>/dev/null; then # 追加导出语句到 index.ts echo "export { $MIGRATION_CLASS } from './$MIGRATION_CLASS';" >> migrations/index.ts echo "已添加 $MIGRATION_CLASS 到 migrations/index.ts" else echo "$MIGRATION_CLASS 已存在于 migrations/index.ts" fi # 3. 更新 src/data-source.ts 的 migrations 数组 echo "" echo "步骤 3: 更新 src/data-source.ts..." if ! grep -q "$MIGRATION_CLASS" src/data-source.ts; then # 在 migrations 数组中添加新类(在最后一个元素后添加) # 使用 awk 查找 // 添加新迁移时... 这一行,并在其前面插入新类 awk -v class="$MIGRATION_CLASS" ' /\/\/ 添加新迁移时,在此处添加对应的/ { print " " class "," } { print } ' src/data-source.ts > src/data-source.ts.tmp && mv src/data-source.ts.tmp src/data-source.ts echo "已添加 $MIGRATION_CLASS 到 src/data-source.ts" else echo "$MIGRATION_CLASS 已存在于 src/data-source.ts" fi echo "" echo "==========================================" echo "迁移创建完成!" echo "==========================================" echo "" echo "下一步操作:" echo "1. 检查并编辑迁移文件: $MIGRATION_FILE" echo "2. 运行迁移: pnpm migration:run" echo ""