create-migration.sh 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #!/bin/bash
  2. # TypeORM 迁移创建自动化脚本
  3. #
  4. # 用法: pnpm run migration:create -- -n MigrationName
  5. #
  6. # 功能:
  7. # 1. 调用 TypeORM CLI 生成迁移文件
  8. # 2. 自动更新 migrations/index.ts Barrel 文件
  9. # 3. 自动更新 src/data-source.ts 的 migrations 数组
  10. set -e # 遇到错误立即退出
  11. # 获取迁移名称参数
  12. MIGRATION_NAME="${1:-}"
  13. if [ -z "$MIGRATION_NAME" ]; then
  14. echo "错误:请提供迁移名称"
  15. echo "用法: pnpm run migration:create -- -n MigrationName"
  16. exit 1
  17. fi
  18. echo "=========================================="
  19. echo "TypeORM 迁移创建工具"
  20. echo "=========================================="
  21. echo "迁移名称: $MIGRATION_NAME"
  22. echo ""
  23. # 进入 server 目录
  24. cd "$(dirname "$0")/.."
  25. # 1. 调用 TypeORM CLI 生成迁移文件
  26. echo "步骤 1: 生成迁移文件..."
  27. pnpm exec typeorm-ts-node-commonjs migration:generate -d src/data-source.ts -n "$MIGRATION_NAME"
  28. # 查找新生成的迁移文件
  29. MIGRATION_FILE=$(find migrations -name "*.ts" -type f | grep -v index.ts | tail -1)
  30. if [ -z "$MIGRATION_FILE" ]; then
  31. echo "错误:未找到生成的迁移文件"
  32. exit 1
  33. fi
  34. echo "生成的迁移文件: $MIGRATION_FILE"
  35. # 提取迁移类名(不含扩展名)
  36. MIGRATION_CLASS=$(basename "$MIGRATION_FILE" .ts)
  37. # 2. 更新 migrations/index.ts Barrel 文件
  38. echo ""
  39. echo "步骤 2: 更新 migrations/index.ts..."
  40. if ! grep -q "$MIGRATION_CLASS" migrations/index.ts 2>/dev/null; then
  41. # 追加导出语句到 index.ts
  42. echo "export { $MIGRATION_CLASS } from './$MIGRATION_CLASS';" >> migrations/index.ts
  43. echo "已添加 $MIGRATION_CLASS 到 migrations/index.ts"
  44. else
  45. echo "$MIGRATION_CLASS 已存在于 migrations/index.ts"
  46. fi
  47. # 3. 更新 src/data-source.ts 的 migrations 数组
  48. echo ""
  49. echo "步骤 3: 更新 src/data-source.ts..."
  50. if ! grep -q "$MIGRATION_CLASS" src/data-source.ts; then
  51. # 在 migrations 数组中添加新类(在最后一个元素后添加)
  52. # 使用 awk 查找 // 添加新迁移时... 这一行,并在其前面插入新类
  53. awk -v class="$MIGRATION_CLASS" '
  54. /\/\/ 添加新迁移时,在此处添加对应的/ {
  55. print " " class ","
  56. }
  57. { print }
  58. ' src/data-source.ts > src/data-source.ts.tmp && mv src/data-source.ts.tmp src/data-source.ts
  59. echo "已添加 $MIGRATION_CLASS 到 src/data-source.ts"
  60. else
  61. echo "$MIGRATION_CLASS 已存在于 src/data-source.ts"
  62. fi
  63. echo ""
  64. echo "=========================================="
  65. echo "迁移创建完成!"
  66. echo "=========================================="
  67. echo ""
  68. echo "下一步操作:"
  69. echo "1. 检查并编辑迁移文件: $MIGRATION_FILE"
  70. echo "2. 运行迁移: pnpm migration:run"
  71. echo ""