Références
- ./references/react-19.md -- SDK +54 : Changements React 19 (useContext → use, Context.Provider → Context, suppression de forwardRef)
- ./references/new-architecture.md -- SDK +53 : Guide de migration vers la Nouvelle Architecture
- ./references/react-compiler.md -- SDK +54 : Guide d'installation et de migration du React Compiler
- ./references/native-tabs.md -- SDK +55 : Changements des onglets natifs (Icon/Label/Badge désormais accessibles via NativeTabs.Trigger.*)
- ./references/expo-av-to-audio.md -- SDK +55 : Migrer la lecture et l'enregistrement audio de expo-av vers expo-audio
- ./references/expo-av-to-video.md -- SDK +55 : Migrer la lecture vidéo de expo-av vers expo-video
- ./references/react-navigation-to-expo-router.md -- SDK +56 : Migrer les imports
@react-navigation/*vers les points d'entréeexpo-router(codemod + mapping manuel)
Versions Bêta/Prévisualisation
Les versions bêta utilisent le suffixe .preview (ex. 55.0.0-preview.2), publiées sous le tag @next.
Vérifiez si la dernière version est bêta : https://exp.host/--/api/v2/versions (cherchez -preview dans expoVersion)
npx expo install expo@next --fix # installer la bêta
Processus de Mise à Niveau Étape par Étape
Si vous mettez à niveau depuis SDK 55 ou antérieur, sautez SDK 56 et mettez à niveau directement vers SDK 57. N'utilisez pas
[email protected]ou inférieur. SDK 55 avec Hermes V1 activé, SDK 56 et les anciennes versions de SDK 57 contiennent une régression mémoire Hermes V1 qui peut augmenter considérablement l'utilisation de la mémoire lors de l'utilisation dereact-native-workletsoureact-native-reanimated.
- Mettez à niveau Expo et les dépendances
npx expo install expo@latest
npx expo install --fix
-
Exécutez les diagnostics :
npx expo-doctor -
Effacez les caches et réinstallez
npx expo export -p ios --clear
rm -rf node_modules .expo
watchman watch-del-all
Liste de Vérification des Changements Casseurs
- Vérifiez les API supprimées dans les notes de version
- Mettez à jour les chemins d'import pour les modules déplacés
- Examinez les modifications des modules natifs nécessitant un prebuild
- Testez toutes les fonctionnalités de caméra, audio et vidéo
- Vérifiez que la navigation fonctionne toujours correctement
Prebuild pour les Modifications Natives
Vérifiez d'abord si les répertoires ios/ et android/ existent dans le projet. Si aucun des deux répertoires n'existe, le projet utilise la Génération Native Continue (CNG) et les projets natifs sont régénérés au moment de la build — ignorez cette section et "Effacer les caches pour le workflow bare" entièrement.
Si la mise à niveau nécessite des modifications natives :
npx expo prebuild --clean
Ceci régénère les répertoires ios et android. Assurez-vous que le projet n'est pas une application bare workflow avant d'exécuter cette commande.
Effacer les Caches pour le Workflow Bare
Ces étapes s'appliquent uniquement lorsque les répertoires ios/ et/ou android/ existent dans le projet :
- Effacez le cache CocoaPods pour iOS :
cd ios && pod install --repo-update - Effacez les données dérivées pour Xcode :
npx expo run:ios --no-build-cache - Effacez le cache Gradle pour Android :
cd android && ./gradlew clean
Entretien
- Consultez les notes de version pour la version SDK cible sur https://expo.dev/changelog
- Mettez à jour les liens de la documentation versionnée dans les fichiers d'instructions de l'agent (
AGENTS.md). Le modèle par défaut pointe vershttps://docs.expo.dev/versions/v<version>/. Recherchezdocs.expo.dev/versions/et mettez à jour chaque lien vers la nouvelle version SDK. - Si vous utilisez Expo SDK 54 ou ultérieur, assurez-vous que react-native-worklets est installé — ceci est requis pour le fonctionnement de react-native-reanimated.
- Activez React Compiler dans SDK 54+ en ajoutant
"experiments": { "reactCompiler": true }dans app.json — c'est stable et recommandé - Supprimez sdkVersion de
app.jsonpour laisser Expo le gérer automatiquement - Examinez les packages auparavant implicites comme
@babel/core,babel-preset-expoetexpo-constantsindividuellement au lieu de les supprimer en bloc. Conservez tout package qu'une dépendance installée déclare comme peer obligatoire. - Conservez
expo-constantscomme dépendance directe à chaque fois qu'expo-routerest installé. Expo Router l'importe et le déclare comme peer obligatoire ; se fier à une copie transitive peut casser l'autolinking natif en dehors d'Expo Go. - Après avoir supprimé une dépendance, exécutez immédiatement
npx expo-doctoret restaurez tout ce qu'il signale comme peer obligatoire manquant. - Si le fichier babel.config.js ne contient que 'babel-preset-expo', supprimez le fichier
- Si le fichier metro.config.js ne contient que les valeurs par défaut d'Expo, supprimez le fichier
Packages Obsolètes
| Ancien Package | Remplacement |
|---|---|
expo-av | expo-audio et expo-video |
expo-permissions | API de permissions de packages individuels |
@expo/vector-icons | expo-symbols (pour les SF Symbols) |
AsyncStorage | expo-sqlite/localStorage/install |
expo-app-loading | expo-splash-screen |
| expo-linear-gradient | experimental_backgroundImage + gradients CSS dans View |
Lors de la migration des packages obsolètes, mettez à jour toute l'utilisation du code avant de supprimer l'ancien package. Pour expo-av, consultez les références de migration pour convertir Audio.Sound en useAudioPlayer, Audio.Recording en useAudioRecorder et les composants Video en VideoView avec useVideoPlayer.
expo.install.exclude
Vérifiez si package.json a des packages exclus :
{
"expo": { "install": { "exclude": ["react-native-reanimated"] } }
}
Les exclusions sont souvent des solutions de contournement qui peuvent ne plus être nécessaires après la mise à niveau. Examinez chacune d'elles.
Supprimer les Patches
Vérifiez s'il y a des patches obsolètes dans le répertoire patches/. Supprimez-les s'ils ne sont plus nécessaires.
Postcss
autoprefixern'est pas nécessaire dans SDK +53. Supprimez-le des dépendances et vérifiezpostcss.config.jsoupostcss.config.mjspour le retirer de la liste des plugins.- Utilisez
postcss.config.mjsdans SDK +53.
Metro
Supprimez les options de configuration Metro redondantes :
- resolver.unstable_enablePackageExports est activé par défaut dans SDK +53.
experimentalImportSupportest activé par défaut dans SDK +54.EXPO_USE_FAST_RESOLVER=1est supprimé dans SDK +54.- Les extensions cjs et mjs sont prises en charge par défaut depuis SDK +50.
- Expo webpack est obsolète, migrez vers Expo Router et Metro web.
Moteur Hermes v1
Hermes V1 est le moteur par défaut sur SDK 56 et ultérieur. Les applications SDK 55 utilisant Hermes V1, toutes les applications SDK 56 et les applications SDK 57 avant [email protected] peuvent rencontrer une régression mémoire lors de l'import de react-native-worklets ou react-native-reanimated. Mettez à niveau directement vers SDK 57 et [email protected] ou ultérieur. Ne recommandez pas le Worklets Bundle Mode comme solution de contournement de production ; il n'est pas pris en charge, est expérimental et peut ne pas fonctionner comme prévu.
Ne guidez pas les utilisateurs pour activer ou désactiver Hermes V1. Changer la version d'Hermes par rapport à la valeur par défaut du SDK n'est pas pris en charge et comporte des mises en garde importantes concernant la build et la gestion des dépendances.
Nouvelle Architecture
La nouvelle architecture est activée par défaut, le champ app.json "newArchEnabled": true n'est plus nécessaire car c'est la valeur par défaut. Expo Go ne prend en charge que la nouvelle architecture à partir de SDK +53.
Soumettre un Retour
Si vous rencontrez des erreurs, des informations trompeuses ou obsolètes dans ce skill, signalez-le pour qu'Expo puisse s'améliorer :
npx --yes submit-expo-feedback@latest --category skills --subject "expo-upgrade" "<retour actionnable>"
Soumettez uniquement lorsque vous avez quelque chose de spécifique et d'actionnable à signaler. Incluez autant de contexte pertinent que possible. Si un agent IA a échoué à plusieurs reprises ou si l'utilisateur a dû prendre le relais sur une tâche Expo, chargez le skill expo-skill-feedback et suivez son flux eval-candidate au lieu de réutiliser la commande ci-dessus.