30 lines
858 B
TypeScript
30 lines
858 B
TypeScript
import { config } from 'dotenv';
|
|
import { existsSync } from 'fs';
|
|
import { resolve } from 'path';
|
|
|
|
/**
|
|
* 分层加载环境变量(后加载的文件覆盖先前的同名键):
|
|
* 1. .env.{NODE_ENV} — 集成配置(MOCK_SMS、微信、阿里云等)
|
|
* 2. .env.{NODE_ENV}.local / .env.local — 本机覆盖
|
|
* 3. .env — 本机基础(PORT、DATABASE_URL);应只放机器相关项,勿重复 MOCK_SMS
|
|
*/
|
|
const apiRoot = resolve(__dirname, '..');
|
|
const nodeEnv = process.env.NODE_ENV ?? 'development';
|
|
|
|
const layers = [
|
|
resolve(apiRoot, `.env.${nodeEnv}`),
|
|
resolve(apiRoot, `.env.${nodeEnv}.local`),
|
|
resolve(apiRoot, '.env.local'),
|
|
resolve(apiRoot, '.env'),
|
|
];
|
|
|
|
for (const file of layers) {
|
|
if (existsSync(file)) {
|
|
config({ path: file, override: true });
|
|
}
|
|
}
|
|
|
|
if (!process.env.NODE_ENV) {
|
|
process.env.NODE_ENV = nodeEnv;
|
|
}
|