用途:用于开发跨平台移动应用(iOS + Android),采用 Expo 托管工作流,并通过 EAS 完成构建、更新与部署。适合需要 EAS Build/Update 配置、通过 Expo SDK 使用原生功能、以及 OTA 更新的场景。不适用于纯 React Native(bare workflow)、纯 Web 应用,或 Expo 不支持的定制原生模块。
主要能力:使用 Expo SDK 模块调用原生功能(如 expo-location、expo-camera),而非直接使用 React Native 的 NativeModules 链接;通过 EAS Build 配置 development、preview、production 等构建配置文件;通过 EAS Update 发布仅含 JS 的 OTA 更新,并用 runtimeVersion 与原生变更匹配;支持使用 TypeScript 编写带类型的组件;支持 Platform.select() 或 .ios.tsx/.android.tsx 处理平台差异;支持 Expo Router 或 React Navigation 导航。
使用方式:先运行 eas init 将项目关联到 EAS,并在 eas.json 中配置构建配置文件。构建命令示例:eas build --platform all --profile production;eas build --platform ios --profile development。发布 OTA 更新:eas update --branch production --message "Fix login crash"。在 app.json 中配置 updates.url 与 runtimeVersion.policy,并声明权限(android.permissions、ios.infoPlist)。使用原生功能前需请求权限,例如 Location.requestForegroundPermissionsAsync()。
限制与注意:任何原生代码变更(新增 SDK 模块、修改 config plugin)都需要重新构建应用商店版本并提升 runtimeVersion,不能仅靠 OTA 更新。权限被拒绝时需处理拒绝状态并引导用户前往设置,不能假设后续启动已授权。离线场景需用 @react-native-community/netinfo 检测网络,并用 AsyncStorage 或 MMKV 缓存数据。自定义原生模块优先使用 Expo config plugins,必要时使用 expo-dev-client;仅在 config plugins 无法满足需求时才 eject 到 bare workflow。开发阶段可用 Expo Go,最终测试应使用真机或模拟器。
资源:https://docs.expo.dev/ 与 https://reactnative.dev/。