From f4072ce93a2869fe61e450c4c2081014548791b7 Mon Sep 17 00:00:00 2001 From: wangziqi Date: Sun, 9 Aug 2026 22:02:00 +0800 Subject: [PATCH] =?UTF-8?q?fix(db):=20=E8=BF=81=E7=A7=BB=20CLI=20=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E8=AF=BB=E5=8F=96=E4=BB=93=E5=BA=93=E6=A0=B9=E7=9B=AE?= =?UTF-8?q?=E5=BD=95=20.env?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - datasource.ts 优先加载根目录 .env,再回退 apps/server/.env - 生产只需维护根目录一份 .env,迁移脚本不再报 root 空密码 --- apps/server/datasource.ts | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/apps/server/datasource.ts b/apps/server/datasource.ts index 3263814..f6d498e 100644 --- a/apps/server/datasource.ts +++ b/apps/server/datasource.ts @@ -1,9 +1,18 @@ import { DataSource } from 'typeorm'; import { config } from 'dotenv'; -import { join } from 'path'; +import { basename, join, resolve } from 'path'; -// TypeORM CLI runs from apps/server/ -const root = process.cwd(); +// 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({