Dans une vraie app
Dans app.json, un plugin se déclare par son nom de package ou par un chemin local, avec d’éventuelles options : ["expo-camera", { "cameraPermission": "…" }]. Un plugin très courant est expo-build-properties, qui règle minSdkVersion, deploymentTarget ou useFrameworks sans toucher aux fichiers natifs. Un plugin local vit en général dans plugins/withQuelqueChose.ts et s’enregistre par chemin relatif.
Les erreurs typiques : un plugin déclaré pour un package désinstallé (prebuild s’arrête avec une erreur, c’est voulu), un mod qui réécrit tout un fichier au lieu de le modifier (les mods suivants perdent leurs changements), et l’usage de withDangerousMod pour des regex sur le Podfile ou MainActivity.kt qui cassent dès que le template change de version de SDK. Un plugin est aussi évalué à chaque lecture de la config, pas seulement au prebuild ; les effets de bord lents (lecture réseau, exécution de commande) ralentissent expo start et EAS.
Pour vérifier qu’un plugin fait ce qu’on croit : npx expo prebuild --clean, puis git diff sur un projet où les dossiers natifs sont temporairement committés, ou npx expo config --type introspect pour voir le résultat des mods sans générer. Un plugin se teste avec expo-module-scripts et des snapshots de fichiers natifs.
Termes liés
Prebuild (Continuous Native Generation)
La commande Expo qui génère les dossiers android et ios à partir de app.json et des config plugins, au lieu de les maintenir à la main.
Expo Modules API
L’API d’Expo pour écrire des modules et vues natifs en Swift et Kotlin avec un DSL commun, sans Objective-C ni boilerplate de bridge.
Expo
Le framework open source recommandé par React Native : SDK de modules natifs, CLI, prebuild, Expo Router, et les services cloud EAS.
EAS Build
Le service de build hébergé d’Expo : des profils dans eas.json, la gestion des credentials, et des runners macOS et Linux pour iOS et Android.