环境变量修改

This commit is contained in:
2026-07-07 20:51:44 +08:00
parent c8dfa50f24
commit ec748335bf
3 changed files with 21 additions and 17 deletions
+4 -5
View File
@@ -1,9 +1,8 @@
# 杜康 API 环境变量模板 # 杜康 API 环境变量模板
# 本地推荐分层: # 本地开发:复制为 .env 后按需修改(pnpm dev:api 仅读取 .env / .env.local
# .env.development — 集成开关与密钥(MOCK_SMS、阿里云、微信 # 可选 .env.local — 本机覆盖(gitignore
# .env — 仅本机项(PORT、DATABASE_URL、REDIS_URL # 服务器部署:bash deploy/sync-api-env.sh development|production(同步到远端 .env
# .env.local — 可选本机覆盖(gitignore) # .env.development / .env.production — 部署源模板,本地 dev 不自动加载
# 生产/预发:bash deploy/sync-api-env.sh development|production
DATABASE_URL="mysql://root:root@localhost:3306/dukang_haoke" DATABASE_URL="mysql://root:root@localhost:3306/dukang_haoke"
REDIS_URL="redis://localhost:6379" REDIS_URL="redis://localhost:6379"
+2 -2
View File
@@ -1,6 +1,6 @@
# 生产环境(真实第三方,关闭 Mock) # 生产环境(真实第三方,关闭 Mock)
# 用法:cp .env.production.example .env.production 后填写密钥 # 用途:deploy/sync-api-env.sh production 的源文件,同步到服务器 .env
# 服务器:bash deploy/sync-api-env.sh production # 本地开发请使用 .env(从 .env.example 复制)
NODE_ENV=production NODE_ENV=production
+15 -10
View File
@@ -3,20 +3,25 @@ import { existsSync } from 'fs';
import { resolve } from 'path'; import { resolve } from 'path';
/** /**
* 分层加载环境变量(后加载的文件覆盖先前的同名键): * 环境变量加载策略(后加载的文件覆盖先前的同名键):
* 1. .env.{NODE_ENV} — 集成配置(MOCK_SMS、微信、阿里云等) *
* 2. .env.{NODE_ENV}.local / .env.local — 本机覆盖 * - 本地开发(NODE_ENV !== production):仅 `.env` + `.env.local`
* 3. .env — 本机基础(PORT、DATABASE_URL);应只放机器相关项,勿重复 MOCK_SMS * `.env.development` 仅作 deploy/sync-api-env.sh 的源模板,不在本地 dev 自动加载
*
* - 线上(NODE_ENV=production):`.env.production` → `.env.production.local` → `.env`
* 服务器实际运行时以 sync 脚本写入的 `.env` 为准
*/ */
const apiRoot = resolve(__dirname, '..'); const apiRoot = resolve(__dirname, '..');
const nodeEnv = process.env.NODE_ENV ?? 'development'; const nodeEnv = process.env.NODE_ENV ?? 'development';
const isProduction = nodeEnv === 'production';
const layers = [ const layers = isProduction
resolve(apiRoot, `.env.${nodeEnv}`), ? [
resolve(apiRoot, `.env.${nodeEnv}.local`), resolve(apiRoot, '.env.production'),
resolve(apiRoot, '.env.local'), resolve(apiRoot, '.env.production.local'),
resolve(apiRoot, '.env'), resolve(apiRoot, '.env'),
]; ]
: [resolve(apiRoot, '.env'), resolve(apiRoot, '.env.local')];
for (const file of layers) { for (const file of layers) {
if (existsSync(file)) { if (existsSync(file)) {