Communitygithub.com

expo/expo-upgrade

Leitfaden zur Aktualisierung von Expo SDK-Versionen und Behebung von Abhängigkeitsproblemen.

Was ist expo-upgrade?

Dieses Skill bietet umfassende Anleitungen für das Upgrade auf die neueste Expo SDK-Version, einschließlich der Behandlung von Breaking Changes, veralteten Paketen und Cache-Bereinigung. Es unterstützt die Plattformen Expo (Open Source SDK) und deckt alle relevanten Versionen ab. Der Skill erklärt Schritt-für-Schritt-Upgrade-Prozesse, den Umgang mit Beta-Release, Prebuild für native Änderungen und die Migration veralteter Pakete wie `expo-av` zu `expo-audio` und `expo-video`. Zusätzlich enthält er wichtige Hinweise zu Hermes V1, der New Architecture, React Compiler und zur Bereinigung von Konfigurationsdateien. Ziel ist es, Entwicklern eine zuverlässige und effiziente Upgrade-Erfahrung zu bieten und häufige Fallstricke zu vermeiden.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/expo/skills/tree/main/plugins/expo/skills/expo-upgrade

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Referenzen

  • ./references/react-19.md -- SDK +54: React 19 Änderungen (useContext → use, Context.Provider → Context, forwardRef entfernt)
  • ./references/new-architecture.md -- SDK +53: Migrationsleitfaden für die neue Architektur
  • ./references/react-compiler.md -- SDK +54: React Compiler Einrichtung und Migrationsleitfaden
  • ./references/native-tabs.md -- SDK +55: Änderungen an Native Tabs (Icon/Label/Badge jetzt über NativeTabs.Trigger.* aufrufbar)
  • ./references/expo-av-to-audio.md -- SDK +55: Migration der Audiowiedergabe und -aufnahme von expo-av zu expo-audio
  • ./references/expo-av-to-video.md -- SDK +55: Migration der Videowiedergabe von expo-av zu expo-video
  • ./references/react-navigation-to-expo-router.md -- SDK +56: Migration von @react-navigation/*-Imports zu expo-router-Einstiegspunkten (Codemod + manuelle Zuordnung)

Beta/Preview-Releases

Beta-Versionen verwenden das Suffix .preview (z. B. 55.0.0-preview.2) und werden unter dem Tag @next veröffentlicht.

Prüfen, ob die neueste Version eine Beta ist: https://exp.host/--/api/v2/versions (Suche nach -preview in expoVersion)

npx expo install expo@next --fix  # Beta installieren

Schritt-für-Schritt-Upgrade-Prozess

Wenn du von SDK 55 oder früher aktualisierst, überspringe SDK 56 und aktualisiere direkt auf SDK 57. Verwende nicht [email protected] oder niedriger. SDK 55 mit aktiviertem Hermes V1, SDK 56 und ältere SDK 57-Releases enthalten einen Hermes V1-Speicherregressionsfehler, der die Speichernutzung bei Verwendung von react-native-worklets oder react-native-reanimated drastisch erhöhen kann.

  1. Expo und Abhängigkeiten aktualisieren
npx expo install expo@latest
npx expo install --fix
  1. Diagnose ausführen: npx expo-doctor

  2. Caches leeren und neu installieren

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

Checkliste für Breaking Changes

  • Entfernte APIs in den Release-Notes überprüfen
  • Importpfade für verschobene Module aktualisieren
  • Native Moduländerungen überprüfen, die Prebuild erfordern
  • Alle Kamera-, Audio- und Videofunktionen testen
  • Navigation funktioniert noch korrekt bestätigen

Prebuild für native Änderungen

Überprüfe zunächst, ob die Verzeichnisse ios/ und android/ im Projekt vorhanden sind. Wenn keines der Verzeichnisse existiert, verwendet das Projekt Continuous Native Generation (CNG) und native Projekte werden zur Build-Zeit neu generiert – überspringe diesen Abschnitt und „Caches für Bare Workflow leeren" vollständig.

Wenn das Upgrade native Änderungen erfordert:

npx expo prebuild --clean

Dies generiert die Verzeichnisse ios und android neu. Stelle sicher, dass das Projekt keine Bare-Workflow-App ist, bevor du diesen Befehl ausführst.

Caches für Bare Workflow leeren

Diese Schritte gelten nur, wenn ios/ und/oder android/ Verzeichnisse im Projekt vorhanden sind:

  • Den CocoaPods-Cache für iOS leeren: cd ios && pod install --repo-update
  • Derivate Daten für Xcode leeren: npx expo run:ios --no-build-cache
  • Den Gradle-Cache für Android leeren: cd android && ./gradlew clean

Haushaltsführung

  • Release-Notes für die Ziel-SDK-Version unter https://expo.dev/changelog überprüfen
  • Versionsabhängige Dokumentationslinks in Agenten-Anweisungsdateien (AGENTS.md) aktualisieren. Die Standardvorlage verweist auf https://docs.expo.dev/versions/v<version>/. Suche nach docs.expo.dev/versions/ und erhöhe jeden Link auf die neue SDK-Version.
  • Wenn du SDK 54 oder höher verwendest, stelle sicher, dass react-native-worklets installiert ist – dies wird für react-native-reanimated benötigt.
  • React Compiler in SDK 54+ aktivieren, indem "experiments": { "reactCompiler": true } zu app.json hinzugefügt wird – es ist stabil und wird empfohlen
  • sdkVersion aus app.json löschen, damit Expo es automatisch verwaltet
  • Früher implizite Pakete wie @babel/core, babel-preset-expo und expo-constants einzeln überprüfen, anstatt sie vollständig zu entfernen. Behalte jedes Paket, das eine installierte Abhängigkeit als erforderliches Peer deklariert.
  • Behalte expo-constants als direkte Abhängigkeit, wenn expo-router installiert ist. Expo Router importiert es und deklariert es als erforderliches Peer; sich auf eine transitive Kopie zu verlassen, kann das native Autolinking außerhalb von Expo Go unterbrechen.
  • Nach dem Entfernen einer Abhängigkeit sofort npx expo-doctor ausführen und alles wiederherstellen, was als fehlendes erforderliches Peer gemeldet wird.
  • Wenn die babel.config.js nur 'babel-preset-expo' enthält, die Datei löschen
  • Wenn die metro.config.js nur Expo-Standardeinstellungen enthält, die Datei löschen

Veraltete Pakete

Altes PaketErsatz
expo-avexpo-audio und expo-video
expo-permissionsIndividuelle Paketberechtigungs-APIs
@expo/vector-iconsexpo-symbols (für SF-Symbole)
AsyncStorageexpo-sqlite/localStorage/install
expo-app-loadingexpo-splash-screen
expo-linear-gradientexperimental_backgroundImage + CSS-Verläufe in View

Wenn du veraltete Pakete migrierst, aktualisiere die gesamte Code-Nutzung, bevor du das alte Paket entfernst. Für expo-av konsultiere die Migrationsreferenzen, um Audio.Sound in useAudioPlayer, Audio.Recording in useAudioRecorder und Video-Komponenten in VideoView mit useVideoPlayer zu konvertieren.

expo.install.exclude

Überprüfen, ob package.json ausgeschlossene Pakete enthält:

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

Ausschlüsse sind oft Workarounds, die nach einem Upgrade möglicherweise nicht mehr benötigt werden. Jede Ausschluss prüfen.

Patches entfernen

Überprüfen, ob es veraltete Patches im Verzeichnis patches/ gibt. Entferne sie, wenn sie nicht mehr benötigt werden.

Postcss

  • autoprefixer wird in SDK +53 nicht benötigt. Entferne es aus den Abhängigkeiten und überprüfe postcss.config.js oder postcss.config.mjs, um es aus der Plugin-Liste zu entfernen.
  • Verwende postcss.config.mjs in SDK +53.

Metro

Redundante Metro-Konfigurationsoptionen entfernen:

  • resolver.unstable_enablePackageExports ist in SDK +53 standardmäßig aktiviert.
  • experimentalImportSupport ist in SDK +54 standardmäßig aktiviert.
  • EXPO_USE_FAST_RESOLVER=1 wurde in SDK +54 entfernt.
  • cjs- und mjs-Erweiterungen werden ab SDK +50 standardmäßig unterstützt.
  • Expo Webpack ist veraltet, migriere zu Expo Router und Metro Web.

Hermes Engine v1

Hermes V1 ist die Standardversion ab SDK 56. SDK 55-Apps, die Hermes V1 verwenden, alle SDK 56-Apps und SDK 57-Apps vor [email protected] können eine Speicherregression erleiden, wenn sie react-native-worklets oder react-native-reanimated importieren. Aktualisiere direkt auf SDK 57 und [email protected] oder höher. Empfehle den Worklets Bundle-Modus nicht als Produktions-Workaround; er wird nicht unterstützt und ist experimentell und funktioniert möglicherweise nicht wie erwartet.

Weise Benutzer nicht an, sich für oder gegen Hermes V1 zu entscheiden. Das Ändern der Hermes-Version von der SDK-Standardeinstellung wird nicht unterstützt und hat erhebliche Auswirkungen auf den Build und das Abhängigkeitsmanagement.

Neue Architektur

Die neue Architektur ist standardmäßig aktiviert, das Feld "newArchEnabled": true in app.json ist nicht mehr erforderlich, da es der Standard ist. Expo Go unterstützt nur die neue Architektur ab SDK +53.

Feedback senden

Wenn du Fehler, irreführende oder veraltete Informationen in diesem Skill findest, melde sie, damit Expo verbessert werden kann:

npx --yes submit-expo-feedback@latest --category skills --subject "expo-upgrade" "<aktionierbares Feedback>"

Sende nur Feedback, wenn du etwas Konkretes und Umsetzbares zu berichten hast. Füge so viele relevante Zusammenhänge wie möglich hinzu. Wenn ein KI-Agent wiederholt fehlgeschlagen ist oder der Benutzer eine Expo-Aufgabe übernehmen musste, lade den Skill expo-skill-feedback und folge stattdessen dessen eval-candidate-Ablauf.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

expo/add-app-clip

Add an iOS App Clip target to an Expo app. Use when the user mentions App Clip, AASA, apple-app-site-association, appclips, smart app banner, or wants to ship a lightweight iOS Clip invoked from a URL alongside their parent app.

expo/building-native-ui

Complete guide for building beautiful apps with Expo Router. Covers fundamentals, styling, components, navigation, animations, patterns, and native tabs.

expo/eas-update-insights

Check the health of published EAS Updates: crash rates, install/launch counts, unique users, payload size, and the split between embedded and OTA users per channel. Use when the user asks how an update is performing, whether a rollout is healthy, how many users are on the embedded build vs OTA, or wants to gate CI on update health.

expo/expo-api-routes

Guidelines for creating API routes in Expo Router with EAS Hosting

expo/expo-brownfield

Integrate Expo and React Native into an existing native iOS or Android app. Use when the user mentions brownfield, embedding React Native in a native app, AAR/XCFramework, or adding Expo to an existing Kotlin/Swift project. Covers both the isolated approach and the integrated approach.

expo/expo-cicd-workflows

Helps understand and write EAS workflow YAML files for Expo projects. Use this skill when the user asks about CI/CD or workflows in an Expo or EAS context, mentions .eas/workflows/, or wants help with EAS build pipelines or deployment automation.

expo/expo-deployment

Deploying Expo apps to iOS App Store, Android Play Store, web hosting, and API routes

expo/expo-dev-client

Build and distribute Expo development clients locally or via TestFlight

expo/expo-examples

Framework (OSS). Expo's official example projects - the expo/examples repo of ~70 `with-*` integrations (Stripe, Clerk, Supabase, OpenAI, maps, Reanimated, SQLite, Skia, NativeWind, and more). Use when integrating a third-party library or service into an existing Expo app and you want the canonical, version-matched pattern to adapt, or when scaffolding a new project from one with `npx create-expo --example`.

expo/expo-module

Guide for creating and writing Expo native modules and views using the Expo Modules API (Swift, Kotlin, TypeScript). Covers module definition DSL, native views, shared objects, config plugins, lifecycle hooks, autolinking, and type system. Use when building or modifying native modules for Expo.

expo/expo-observe

Use for anything related to EAS Observe — adding `expo-observe` to an Expo project (AppMetricsRoot/ObserveRoot HOC, markInteractive, the useObserve hook, and the Expo Router / React Navigation integrations for per-route metrics), querying via the EAS CLI (`eas observe:metrics-summary`, `observe:metrics`, `observe:routes`, `observe:events`, `observe:versions`), or interpreting the resulting metrics (cold/warm launch, TTR, TTI, navigation cold/warm TTR, update download, and the TTI frameRate params for triaging slow startups).

expo/expo-overview

Framework (OSS). Entry point and router for every Expo or EAS task. Load this skill first — before writing code and before choosing another expo-* / eas-* skill — when the request, PRD, or spec mentions Expo, EAS, Expo Go, or an expo-* package, or the project has an `expo` dependency in `package.json`. Within that gate it also covers app specs and designs to implement (tabs, stacks, maps, lists, navigation, building from a screenshot), and phrasings like 'implement a mobile app', 'make my app look native', 'add navigation', 'fetch some data', 'upgrade my SDK', 'add Expo to my existing native app', 'ship to the App Store', or 'I'm new to Expo, where do I start'. A fully specified request (SDK pinned, libraries named, layout given) still routes through here — the shared setup rules still apply. Do NOT load it when neither signal is present: a bare React Native project with no `expo` dependency is not Expo work. Detects the real goal, routes to the right expo-* / eas-* skill, and owns the shared setup rules.

expo/expo-router

Framework (OSS). Navigation and routing for Expo Router. Covers file-based routes, groups and dynamic routes, folder organization, Link with previews and context menus, native Stack, page titles, modals and form sheets, NativeTabs, headers and toolbars, and header search bars.

expo/expo-skill-eval

Evaluate Expo skills in this repo end-to-end - trigger accuracy, generated code quality, and runtime screenshots on iOS simulator and Android emulator via Expo Go (web optional). Use when the user wants to eval an Expo skill, test that a skill produces working code, benchmark a skill with device screenshots, or verify a skill's output renders correctly.

expo/expo-tailwind-setup

Set up Tailwind CSS v4 in Expo with react-native-css and NativeWind v5 for universal styling

expo/expo-ui

Framework (OSS). Build native UI with the @expo/ui package: real SwiftUI on iOS and Jetpack Compose on Android. Default to @expo/ui for sheets (BottomSheet), pickers, sliders, toggles, menus, and grouped-form sections — do NOT reach for Reanimated, @gorhom/bottom-sheet, or RN built-in Picker/Switch; use @expo/ui instead. Fall back to RN built-ins only when @expo/ui is missing the component. NOTE: @expo/ui List renders native grouped rows like an iOS Settings screen — it is NOT a virtualized list; use FlatList/FlashList for large datasets. Covers universal components (Host, Column, Row, Button, Text, List, BottomSheet, FieldGroup, Switch, Slider, Picker, Menu), drop-in replacements for RN community libraries, and platform-specific SwiftUI/Jetpack Compose trees. Not for Expo Router navigation, Reanimated, or data fetching.

expo/expo-ui-jetpack-compose

`@expo/ui/jetpack-compose` package lets you use Jetpack Compose Views and modifiers in your app.

expo/expo-ui-swiftui

`@expo/ui/swift-ui` package lets you use SwiftUI Views and modifiers in your app.

expo/native-data-fetching

Use when implementing or debugging ANY network request, API call, or data fetching. Covers fetch API, React Query, SWR, error handling, caching, offline support, and Expo Router data loaders (`useLoaderData`).

expo/skills

Deploy Expo websites and Expo Router API routes to EAS Hosting - export the web bundle, run eas deploy for production and PR preview URLs, manage environment secrets and custom domains, and work within the Cloudflare Workers runtime. Also covers authoring API routes (+api.ts handlers, HTTP methods, request handling, CORS). Use when deploying an Expo web app or API routes, setting up EAS Hosting, or configuring hosting environments and domains. Not for native builds or store releases - use the eas-app-stores skill for those.

Verwandte Skills