import { config } from 'dotenv'; import { existsSync } from 'fs'; import { resolve } from 'path'; /** * 环境变量加载策略(后加载的文件覆盖先前的同名键): * * - 本地开发:仅 `.env` + `.env.local` * `.env.development` 仅作参考模板,不自动加载 * * - 服务器(NODE_ENV=production):仅 `.env.production` + `.env.production.local` * 不使用 `.env`,避免与本地开发配置混淆 */ const apiRoot = resolve(__dirname, '..'); const nodeEnv = process.env.NODE_ENV ?? 'development'; const isProduction = nodeEnv === 'production'; const layers = isProduction ? [resolve(apiRoot, '.env.production'), resolve(apiRoot, '.env.production.local')] : [resolve(apiRoot, '.env'), resolve(apiRoot, '.env.local')]; for (const file of layers) { if (existsSync(file)) { config({ path: file, override: true }); } } if (!process.env.NODE_ENV) { process.env.NODE_ENV = nodeEnv; }