34 lines
1.2 KiB
TypeScript
34 lines
1.2 KiB
TypeScript
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,
|
||
},
|
||
},
|
||
};
|
||
};
|
||
|