|
|
|
|
|
/**
|
|
|
|
|
|
* 应用配置工具
|
|
|
|
|
|
* 统一管理环境变量和配置
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
import Constants from 'expo-constants';
|
|
|
|
|
|
import { Platform } from 'react-native';
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 环境类型
|
|
|
|
|
|
*/
|
|
|
|
|
|
export type Environment = 'development' | 'staging' | 'production';
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取当前环境
|
|
|
|
|
|
*/
|
|
|
|
|
|
export const getEnvironment = (): Environment => {
|
|
|
|
|
|
if (__DEV__) {
|
|
|
|
|
|
return 'development';
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 可以通过环境变量或其他方式判断 staging 环境
|
|
|
|
|
|
const env = process.env.EXPO_PUBLIC_ENV;
|
|
|
|
|
|
if (env === 'staging') {
|
|
|
|
|
|
return 'staging';
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return 'production';
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取 API 基础 URL
|
|
|
|
|
|
*/
|
|
|
|
|
|
export const getApiBaseUrl = (): string => {
|
|
|
|
|
|
// 1. 优先使用环境变量
|
|
|
|
|
|
const envApiUrl = process.env.EXPO_PUBLIC_API_URL;
|
|
|
|
|
|
if (envApiUrl) {
|
|
|
|
|
|
return envApiUrl;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 2. 根据环境返回不同的 URL
|
|
|
|
|
|
const env = getEnvironment();
|
|
|
|
|
|
|
|
|
|
|
|
switch (env) {
|
|
|
|
|
|
case 'development':
|
|
|
|
|
|
// 开发环境
|
|
|
|
|
|
if (Platform.OS === 'web') {
|
|
|
|
|
|
// Web 平台使用代理服务器
|
|
|
|
|
|
// 代理服务器运行在 http://localhost:8086
|
|
|
|
|
|
// 会将 /api/* 请求转发到目标服务器
|
|
|
|
|
|
return 'http://localhost:8086/api';
|
|
|
|
|
|
} else {
|
|
|
|
|
|
// iOS/Android 使用本机 IP
|
|
|
|
|
|
// ⚠️ 重要:需要替换为你的本机 IP 地址
|
|
|
|
|
|
// 查看本机 IP:
|
|
|
|
|
|
// - Windows: ipconfig
|
|
|
|
|
|
// - Mac/Linux: ifconfig
|
|
|
|
|
|
// - 或者使用 Metro Bundler 显示的 IP
|
|
|
|
|
|
// process.env.APP_IP_ADDRESS 在 .env.development.local 中配置 自己本地创建,避免提交到代码库
|
|
|
|
|
|
return process.env.APP_IP_ADDRESS || 'http://192.168.1.100:8086/api';
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
case 'staging':
|
|
|
|
|
|
// 预发布环境
|
|
|
|
|
|
return 'https://staging-api.yourdomain.com/api';
|
|
|
|
|
|
|
|
|
|
|
|
case 'production':
|
|
|
|
|
|
// 生产环境
|
|
|
|
|
|
return 'https://api.yourdomain.com/api';
|
|
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
|
return '/api';
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取 API 超时时间
|
|
|
|
|
|
*/
|
|
|
|
|
|
export const getApiTimeout = (): number => {
|
|
|
|
|
|
const timeout = process.env.EXPO_PUBLIC_API_TIMEOUT;
|
|
|
|
|
|
return timeout ? Number(timeout) : 10000;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 应用配置
|
|
|
|
|
|
*/
|
|
|
|
|
|
export const config = {
|
|
|
|
|
|
// 环境
|
|
|
|
|
|
env: getEnvironment(),
|
|
|
|
|
|
isDev: __DEV__,
|
|
|
|
|
|
|
|
|
|
|
|
// API 配置
|
|
|
|
|
|
api: {
|
|
|
|
|
|
baseURL: getApiBaseUrl(),
|
|
|
|
|
|
timeout: getApiTimeout(),
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 应用信息
|
|
|
|
|
|
app: {
|
|
|
|
|
|
name: process.env.EXPO_PUBLIC_APP_NAME || 'RN Demo',
|
|
|
|
|
|
version: process.env.EXPO_PUBLIC_APP_VERSION || '1.0.0',
|
|
|
|
|
|
bundleId: Constants.expoConfig?.ios?.bundleIdentifier || '',
|
|
|
|
|
|
packageName: Constants.expoConfig?.android?.package || '',
|
|
|
|
|
|
vk: 'fT6phq0wkOPRlAoyToidAnkogUV7ttGo',
|
|
|
|
|
|
nc: 1,
|
|
|
|
|
|
aseqId: '7',
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 平台信息
|
|
|
|
|
|
platform: {
|
|
|
|
|
|
os: Platform.OS,
|
|
|
|
|
|
version: Platform.Version,
|
|
|
|
|
|
isWeb: Platform.OS === 'web',
|
|
|
|
|
|
isIOS: Platform.OS === 'ios',
|
|
|
|
|
|
isAndroid: Platform.OS === 'android',
|
|
|
|
|
|
},
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 打印配置信息(仅开发环境)
|
|
|
|
|
|
*/
|
|
|
|
|
|
export const printConfig = () => {
|
|
|
|
|
|
if (__DEV__) {
|
|
|
|
|
|
console.log('📋 App Configuration:', {
|
|
|
|
|
|
environment: config.env,
|
|
|
|
|
|
apiBaseURL: config.api.baseURL,
|
|
|
|
|
|
platform: config.platform.os,
|
|
|
|
|
|
version: config.app.version,
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
export default config;
|