import { DataSource } from 'typeorm'; import { config } from 'dotenv'; import { basename, join, resolve } from 'path'; // TypeORM CLI 默认在 apps/server/ 下运行,但生产环境的 .env 通常放在仓库根目录。 // 这里先加载仓库根目录的 .env(默认),再加载当前目录(apps/server/.env)作为补充/覆盖, // 这样无论 .env 放哪一份,迁移 CLI 都能读到数据库配置。 const root = resolve(process.cwd()); const repoRoot = basename(root) === 'server' && basename(join(root, '..')) === 'apps' ? resolve(root, '../..') : root; // 先根目录,后当前目录(dotenv 默认不覆盖已存在变量,所以根目录优先级更高) config({ path: join(repoRoot, '.env') }); config({ path: join(root, '.env') }); export default new DataSource({ type: 'mysql', host: process.env.DB_HOST || 'localhost', port: Number(process.env.DB_PORT) || 3306, username: process.env.DB_USERNAME || 'root', password: process.env.DB_PASSWORD || '', database: process.env.DB_DATABASE || 'dorm_billing', charset: 'utf8mb4', entities: [join(root, 'src/**/*.entity.ts')], migrations: [join(root, 'src/migrations/*.ts')], });