expo-upgrade

Par expo · skills

Framework (OSS). Recommandations pour la mise à niveau des versions du SDK Expo et la résolution des problèmes de dépendances

npx skills add https://github.com/expo/skills --skill expo-upgrade

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 de la nouvelle architecture
  • ./references/react-compiler.md -- SDK +54: Guide de configuration et migration du compilateur React
  • ./references/native-tabs.md -- SDK +55: Changements des onglets natifs (Icon/Label/Badge maintenant 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ée expo-router (codemod + mappage manuel)

Versions bêta/aperçu

Les versions bêta utilisent le suffixe .preview (par exemple, 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 à jour étape par étape

  1. Mettre à jour Expo et les dépendances
npx expo install expo@latest
npx expo install --fix
  1. Exécuter les diagnostiques : npx expo-doctor

  2. Effacer les caches et réinstaller

npx expo export -p ios --clear
rm -rf node_modules .expo
watchman watch-del-all

Liste de contrôle des changements de rupture

  • Vérifier les API supprimées dans les notes de version
  • Mettre à jour les chemins d'importation des modules déplacés
  • Examiner les changements de modules natifs nécessitant une précompilation
  • Tester tous les services de caméra, audio et vidéo
  • Vérifier que la navigation fonctionne toujours correctement

Précompilation pour les changements natifs

Vérifiez d'abord si les répertoires ios/ et android/ existent dans le projet. Si aucun de ces 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 compilation — ignorez cette section et « Effacer les caches pour le workflow bare » entièrement.

Si la mise à niveau nécessite des changements natifs :

npx expo prebuild --clean

Cela 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

Maintenance

  • Examinez les notes de version pour la version SDK cible sur https://expo.dev/changelog
  • Si vous utilisez Expo SDK 54 ou version ultérieure, assurez-vous que react-native-worklets est installé — c'est une exigence pour que react-native-reanimated fonctionne.
  • Activez le compilateur React dans SDK 54+ en ajoutant "experiments": { "reactCompiler": true } à app.json — c'est stable et recommandé
  • Supprimez sdkVersion de app.json pour laisser Expo le gérer automatiquement
  • Supprimez les packages implicites de package.json : @babel/core, babel-preset-expo, expo-constants.
  • Si babel.config.js ne contient que 'babel-preset-expo', supprimez le fichier
  • Si metro.config.js ne contient que les valeurs par défaut 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 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 de packages obsolètes, mettez à jour tous les usages de 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 contient des packages exclus :

{
  "expo": { "install": { "exclude": ["react-native-reanimated"] } }
}

Les exclusions sont souvent des contournements qui peuvent ne plus être nécessaires après la mise à niveau. Examinez chacun d'eux.

Suppression des 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

  • autoprefixer n'est pas nécessaire dans SDK +53. Supprimez-le des dépendances et vérifiez postcss.config.js ou postcss.config.mjs pour le supprimer de la liste des plugins.
  • Utilisez postcss.config.mjs dans SDK +53.

Metro

Supprimez les options de configuration metro redondantes :

  • resolver.unstable_enablePackageExports est activé par défaut dans SDK +53.
  • experimentalImportSupport est activé par défaut dans SDK +54.
  • EXPO_USE_FAST_RESOLVER=1 est supprimé dans SDK +54.
  • Les extensions cjs et mjs sont prises en charge par défaut dans SDK +50.
  • Expo webpack est obsolète, migrez vers Expo Router et Metro web.

Moteur Hermes v1

Depuis SDK 55, les utilisateurs peuvent opter pour l'utilisation du moteur Hermes v1 pour améliorer les performances d'exécution. Cela nécessite de définir useHermesV1: true dans la configuration du plugin expo-build-properties, et peut nécessiter une version spécifique du package npm hermes-compiler. Hermes v1 deviendra la valeur par défaut dans une future version du SDK.

Nouvelle architecture

La nouvelle architecture est activée par défaut, le champ "newArchEnabled": true dans app.json 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.

Skills similaires