import type { ConfigContext, ExpoConfig } from 'expo/config'; /** * 运行时获取 Push Token(expo-notifications)在真机/Dev Client 场景下通常需要 projectId。 * * 这里把 projectId 注入到 `extra.eas.projectId`: * - 开发/本地:从 `.env.local`(EXPO_PUBLIC_EAS_PROJECT_ID)读取并写入配置 * - CI/EAS:也可通过环境变量注入(EXPO_PUBLIC_EAS_PROJECT_ID 或 EAS_PROJECT_ID) */ export default ({ config }: ConfigContext): ExpoConfig => { const projectId = process.env.EXPO_PUBLIC_EAS_PROJECT_ID || // 兼容部分 CI/EAS 注入的变量名 process.env.EAS_PROJECT_ID; return { ...config, // ExpoConfig 的类型要求 name 必填,避免 `...config` 的可选类型导致 tsc 报错 name: config.name ?? 'client', // slug 在绝大多数场景也建议固定为非空字符串(保持与 app.json 一致) slug: config.slug ?? 'client', extra: { ...(config.extra ?? {}), eas: { // 保留已有配置,再覆盖 projectId // eslint-disable-next-line @typescript-eslint/no-explicit-any ...(((config.extra as any) ?? {}).eas ?? {}), projectId: projectId ?? (config.extra as any)?.eas?.projectId, }, }, }; };