/** * 环境变量管理系统 * * 这个模块提供统一的环境配置管理,支持多环境切换 * 根据构建时的 NODE_ENV 自动加载对应的环境配置文件 */ // 环境类型定义 export type Environment = 'dev' | 'test' | 'uat' | 'prod'; // 环境配置接口 export interface EnvironmentConfig { // 基础配置 NODE_ENV: string; FRONTEND_BASE_URL: string; BACKEND_BASE_URL: string; API_VERSION: string; // 功能配置 DEBUG: boolean; USE_MOCK: boolean; // 应用信息 APP_NAME: string; ENV_DESCRIPTION: string; // 高级配置 API_TIMEOUT?: number; ENABLE_ERROR_LOGGING?: boolean; ENABLE_PERFORMANCE_MONITORING?: boolean; ENABLE_USER_BEHAVIOR_TRACKING?: boolean; SENTRY_DSN?: string; CDN_BASE_URL?: string; // 生产环境特有 ENABLE_MAINTENANCE_MODE?: boolean; ENABLE_NEW_FEATURES?: boolean; ENABLE_BETA_FEATURES?: boolean; ENABLE_ANALYTICS?: boolean; CACHE_TTL?: number; ENABLE_SERVICE_WORKER?: boolean; } // 环境配置映射 const ENV_CONFIGS: Record = { dev: { NODE_ENV: 'development', FRONTEND_BASE_URL: 'https://cavin-smart-crop-ui-app.dev.maimaiag.com', BACKEND_BASE_URL: 'https://cavin-smart-crop-backend-app.dev.maimaiag.com', API_VERSION: 'v1', DEBUG: true, USE_MOCK: false, APP_NAME: '智慧农业生产管理系统', ENV_DESCRIPTION: '开发环境', API_TIMEOUT: 10000, ENABLE_ERROR_LOGGING: true, ENABLE_PERFORMANCE_MONITORING: true, }, test: { NODE_ENV: 'test', FRONTEND_BASE_URL: 'https://cavin-smart-crop-ui-app.test.maimaiag.com', BACKEND_BASE_URL: 'https://cavin-smart-crop-backend-app.dev.maimaiag.com', // 临时使用开发环境后端 API_VERSION: 'v1', DEBUG: true, USE_MOCK: false, APP_NAME: '智慧农业生产管理系统', ENV_DESCRIPTION: '测试环境', API_TIMEOUT: 15000, ENABLE_ERROR_LOGGING: true, ENABLE_PERFORMANCE_MONITORING: true, ENABLE_USER_BEHAVIOR_TRACKING: true, }, uat: { NODE_ENV: 'production', FRONTEND_BASE_URL: 'https://cavin-smart-crop-ui-app.uat.maimaiag.com', BACKEND_BASE_URL: 'https://cavin-smart-crop-backend-app.uat.maimaiag.com', API_VERSION: 'v1', DEBUG: false, USE_MOCK: false, APP_NAME: '智慧农业生产管理系统', ENV_DESCRIPTION: 'UAT 环境', API_TIMEOUT: 20000, ENABLE_ERROR_LOGGING: true, ENABLE_PERFORMANCE_MONITORING: true, ENABLE_USER_BEHAVIOR_TRACKING: true, SENTRY_DSN: 'https://your-sentry-dsn.uat@sentry.io/project-id', }, prod: { NODE_ENV: 'production', FRONTEND_BASE_URL: 'https://cavin-smart-crop-ui-app.prod.maimaiag.com', BACKEND_BASE_URL: 'https://cavin-smart-crop-backend-app.prod.maimaiag.com', API_VERSION: 'v1', DEBUG: false, USE_MOCK: false, APP_NAME: '智慧农业生产管理系统', ENV_DESCRIPTION: '生产环境', API_TIMEOUT: 30000, ENABLE_ERROR_LOGGING: true, ENABLE_PERFORMANCE_MONITORING: true, ENABLE_USER_BEHAVIOR_TRACKING: true, ENABLE_ANALYTICS: true, SENTRY_DSN: 'https://your-sentry-dsn.prod@sentry.io/project-id', CDN_BASE_URL: 'https://cdn.cavin-smart-crop.com', ENABLE_MAINTENANCE_MODE: false, ENABLE_NEW_FEATURES: true, ENABLE_BETA_FEATURES: false, CACHE_TTL: 3600, ENABLE_SERVICE_WORKER: true, }, }; /** * 获取当前环境 * * 优先级: * 1. 环境变量 NEXT_PUBLIC_ENV * 2. 环境变量 NODE_ENV * 3. 默认 'dev' 环境 */ export const getEnv = (): Environment => { // 浏览器环境 if (typeof window !== 'undefined') { const env = process.env.NEXT_PUBLIC_ENV as Environment; if (env && Object.keys(ENV_CONFIGS).includes(env)) { return env; } } // 服务端环境 const nodeEnv = process.env.NODE_ENV; if (nodeEnv === 'development') return 'dev'; if (nodeEnv === 'test') return 'test'; if (nodeEnv === 'production') { // 生产环境下需要进一步区分 UAT 和 PROD const env = process.env.NEXT_PUBLIC_ENV as Environment; return (env === 'uat' || env === 'prod') ? env : 'prod'; } return 'dev'; // 默认开发环境 }; /** * 获取当前环境配置 */ export const getEnvConfig = (): EnvironmentConfig => { const currentEnv = getEnv(); return ENV_CONFIGS[currentEnv]; }; /** * 获取当前环境名称 */ export const getEnvironmentName = (): string => { const config = getEnvConfig(); return config.ENV_DESCRIPTION; }; /** * 获取当前服务器域名(前端地址) */ export const getLocalhost = (): string => { const config = getEnvConfig(); return config.FRONTEND_BASE_URL; }; /** * 获取后端 API 地址 */ export const getBackendUrl = (): string => { const config = getEnvConfig(); return config.BACKEND_BASE_URL; }; /** * 获取完整的 API 地址 */ export const getApiUrl = (path?: string): string => { const backendUrl = getBackendUrl(); const apiVersion = getEnvConfig().API_VERSION; const apiPath = `/api/${apiVersion}${path || ''}`; return `${backendUrl}${apiPath}`; }; /** * 是否为开发环境 */ export const isDevelopment = (): boolean => { return getEnv() === 'dev'; }; /** * 是否为测试环境 */ export const isTest = (): boolean => { return getEnv() === 'test'; }; /** * 是否为 UAT 环境 */ export const isUAT = (): boolean => { return getEnv() === 'uat'; }; /** * 是否为生产环境 */ export const isProduction = (): boolean => { return getEnv() === 'prod'; }; /** * 是否为非开发环境 */ export const isNonDevelopment = (): boolean => { return !isDevelopment(); }; /** * 是否开启调试模式 */ export const isDebugMode = (): boolean => { return getEnvConfig().DEBUG; }; /** * 是否使用 Mock 数据 */ export const shouldUseMock = (): boolean => { return getEnvConfig().USE_MOCK; }; /** * 获取 API 超时时间(毫秒) */ export const getApiTimeout = (): number => { return getEnvConfig().API_TIMEOUT || 10000; }; /** * 获取应用名称 */ export const getAppName = (): string => { return getEnvConfig().APP_NAME; }; /** * 环境信息调试输出 */ export const debugEnvInfo = (): void => { if (isDebugMode()) { const config = getEnvConfig(); const env = getEnv(); console.group('🌍 环境信息'); console.log('当前环境:', env); console.log('环境描述:', config.ENV_DESCRIPTION); console.log('前端地址:', config.FRONTEND_BASE_URL); console.log('后端地址:', config.BACKEND_BASE_URL); console.log('调试模式:', config.DEBUG); console.log('使用 Mock:', config.USE_MOCK); console.log('NODE_ENV:', process.env.NODE_ENV); console.log('NEXT_PUBLIC_ENV:', process.env.NEXT_PUBLIC_ENV); console.groupEnd(); } }; // 默认导出主要函数 export default { getEnv, getEnvConfig, getEnvironmentName, getLocalhost, getBackendUrl, getApiUrl, isDevelopment, isTest, isUAT, isProduction, isNonDevelopment, isDebugMode, shouldUseMock, getApiTimeout, getAppName, debugEnvInfo, };