Expo Brownfield
Une app brownfield est une app native iOS ou Android existante qui adopte React Native de manière progressive, contrairement à une app greenfield qui utilise React Native dès le départ.
Expo supporte deux approches distinctes pour ajouter React Native à un projet brownfield :
| Approche | Ce qui est livré à l'app native | Quand choisir |
|---|---|---|
| Isolated | AAR / XCFramework précompilé | L'équipe native n'a pas besoin de Node ou des outils RN ; le code RN peut être dans un repo séparé |
| Integrated | Sources React Native ajoutées au build Gradle / CocoaPods existant | Une seule équipe possède tout ; à l'aise avec les outils RN ; veut un seul build |
Pour la matrice de décision complète, voir ./references/comparison.md.
Choisir une approche
Utilisez ces règles rapides — consultez comparison.md pour toute ambiguïté.
- Choisissez isolated si l'équipe iOS/Android doit consommer RN comme une dépendance de bibliothèque régulière (AAR ou XCFramework), sans installer Node, Yarn ou la toolchain de build React Native.
- Choisissez isolated si le code RN et le code native vivent dans des dépôts séparés ou sortent à des cadences indépendantes.
- Choisissez integrated si une seule équipe possède le code natif et RN et est disposée à ajouter React Native + Expo à la configuration Gradle et CocoaPods du projet natif.
- Choisissez integrated si vous voulez que hot reload et les source maps JS fonctionnent sans accroc dans le processus de build natif existant.
Références
- ./references/brownfield-isolated.md -- Construire RN en tant qu'AAR/XCFramework et consommer à partir de l'app native (BrownfieldActivity, ReactNativeViewController, ReactNativeView)
- ./references/brownfield-integrated.md -- Ajouter RN et Expo directement aux builds Gradle et CocoaPods existants (ReactActivity, RCTRootView, Podfile)
- ./references/comparison.md -- Critères de décision, compromis et cartographie de scénarios pour choisir une approche
- ./references/troubleshooting.md -- Problèmes de connexion Metro, de build, de signature et de résolution de modules courants aux deux approches
Plus d'informations disponibles sur https://docs.expo.dev/brownfield/overview/
Prérequis partagés
Les deux approches nécessitent, dans l'environnement qui construit le côté React Native :
- Node.js (LTS) — exécute l'Expo CLI et le code JavaScript.
- Yarn — gère les dépendances JavaScript.
L'approche intégrée nécessite en plus CocoaPods sur iOS (sudo gem install cocoapods). L'approche isolée ne nécessite pas CocoaPods ou aucun outil RN dans l'app native consommatrice.
Note de versioning
Expo SDK 55 est la version minimale supportée pour l'intégration brownfield. Les SDK antérieurs manquent expo-brownfield, les points d'entrée requis ExpoReactHostFactory / ExpoReactNativeFactory, et la surface autolinking actuelle. Lors de la création du projet Expo, épinglez toujours explicitement le SDK :
npx create-expo-app@latest my-project --template default@sdk-55
Épinglez le même Expo SDK dans le projet RN et toutes les dépendances intégrées.