Upgrade React Native

react-native-community/skills/upgrade-react-native

作者 react-native-community1fb0e0848fc7f4bbf42fec490338613cbc6f6b08MIT收錄於 2026年10月9日更新於 2026年10月9日

Use when upgrading react-native to a newer version. Handles version bumps, native project changes (Android/iOS), dependency updates, and breaking change migration. Invoke with `/upgrade-react-native <version>`.

AI 產生的概覽

指導使用 Upgrade Helper 差異將 React Native Community CLI 專案升級至目標版本。

功能
此技能依序偵測目前的 React Native 版本、驗證目標版本、從 React Native Upgrade Helper 取得對應差異,並把範本路徑與識別字對應到實際專案。它將變更分類為可直接套用、衝突、新增檔案或刪除檔案,規劃第三方原生相依套件的版本升級,並處理 0.87 的 Strict TypeScript API 邊界。最後提供安裝相依套件、pod install、清除建置與執行測試的升級後檢查清單。
適用情境
適用於 React Native Community CLI 專案需要升級到較新的 React Native 版本時,包括 Android 與 iOS 原生專案變更、相依套件更新以及破壞性變更移轉。呼叫方式為 /upgrade-react-native 。
執行需求
需要網路存取以取得 rn-diff-purge 的 RELEASES 清單與版本差異,並需要讀取和編輯 package.json、app.json 以及 Android/iOS 原生檔案等專案檔案。此技能不附指令碼,僅為說明文件,另有一份關於 Upgrade Helper API 的參考文件。它不會自動執行 npm install、yarn install 或 pod install。

Upgrade React Native

Upgrade a React Native Community CLI project to a target version by fetching and applying the diff from the React Native Upgrade Helper.

<!-- LLM_EXCLUDE: Human-only context below -->

[!Note] Expo users: For Expo projects or more complex upgrade scenarios, try:

<!-- /LLM_EXCLUDE -->

Invocation

/upgrade-react-native <targetVersion>
  • <targetVersion> — the React Native version to upgrade to (e.g. 0.79.0).

Step-by-step procedure

Follow every step below in order. Do not skip steps.

1. Detect the current React Native version

Read the project's root package.json and extract the react-native version from dependencies (or devDependencies). Strip any semver range prefix (^, ~, >=, etc.) to get the exact current version string.

If the current version cannot be determined, stop and ask the user.

2. Validate the target version

  • The target version must be a valid semver string (e.g. 0.79.0).
  • It must be greater than the current version.
  • Verify the target version exists by checking:
    https://raw.githubusercontent.com/react-native-community/rn-diff-purge/master/RELEASES
    Fetch this file and confirm the target version is listed. If not, report the closest available versions and ask the user to choose.

3. Fetch the upgrade diff

Fetch the unified diff between the two versions:

https://raw.githubusercontent.com/react-native-community/rn-diff-purge/diffs/diffs/<currentVersion>..<targetVersion>.diff

For example, to upgrade from 0.73.0 to 0.74.0:

https://raw.githubusercontent.com/react-native-community/rn-diff-purge/diffs/diffs/0.73.0..0.74.0.diff

If the diff cannot be fetched (404), it may be because exact patch versions are not available. Try the nearest minor versions (e.g. 0.73.0 instead of 0.73.2). Report what you tried and ask the user if needed.

4. Parse the diff and map file paths

The diff uses the template project name RnDiffApp. Map every path in the diff to the actual project:

Diff path prefixActual project path
RnDiffApp/Project root (./)

Additionally, replace occurrences of the template identifiers with the project's actual names:

Template valueReplace with
RnDiffAppThe project's app name (from app.json → name, or the name field in package.json)
rndiffappLowercase version of the project's app name
com.rndiffappThe project's Android package name (from android/app/build.gradle or android/app/src/main/AndroidManifest.xml)

5. Review the diff and plan changes

Before making any edits, review the entire diff and categorize changes:

  1. Direct applies — files that exist in the project and whose original content matches the diff's - lines. These can be applied as-is.
  2. Conflicts — files where the project's content has diverged from the template (custom modifications). These need manual merging.
  3. New files — files in the diff that don't exist in the project yet. Create them.
  4. Deleted files — files the diff removes. Delete them only if the project hasn't added custom content to them.

Present this plan to the user before proceeding. Group changes by area:

  • Root config files (package.json, metro.config.js, .eslintrc.js, etc.)
  • iOS native files (ios/ directory)
  • Android native files (android/ directory)
  • JavaScript/TypeScript source (if any template source files changed)
  • Third-party native dependencies (from step 7 — include any version bumps identified there)

6. Apply changes

Apply the changes following the plan from step 5:

  • For direct applies: edit the file to match the diff's + lines.
  • For conflicts: apply the upgrade changes while preserving the project's customizations. Use your judgement to merge. If uncertain, show both versions and ask the user.
  • For new files: create them at the mapped path.
  • For deleted files: remove them.

Important considerations:

  • When updating package.json, update the react-native version and any related dependencies mentioned in the diff (e.g. react, @react-native/* packages, Gradle versions, CocoaPods versions).
  • Do NOT run npm install / yarn install / pod install automatically. Inform the user these steps are needed after the upgrade.
  • Refer to the references section for version-specific guidance on breaking changes and migration notes.

7. Update third-party native dependencies

Scan the project's dependencies and devDependencies in package.json for third-party React Native libraries that contain native code (i.e. they have an ios/ or android/ directory, or are known native modules). Common examples include react-native-screens, react-native-reanimated, react-native-gesture-handler, @react-native-async-storage/async-storage, react-native-svg, react-native-safe-area-context, etc.

For each candidate dependency:

  1. Fetch the library's README from its GitHub repository or npm page.
  2. Look for a React Native version compatibility table or section — many native libraries document which versions of their package support which React Native versions (e.g. a "Compatibility" or "Version Support" table).
  3. If the README contains a compatibility table that maps the target React Native version to a specific library version, include that library version bump in the upgrade plan.
  4. If the README does not mention version compatibility with React Native versions, skip the library — do not guess or assume an upgrade is needed.

Present all proposed dependency bumps alongside the diff-based changes in step 5 (grouped under a Third-party native dependencies section). For each:

  • State the current version, the proposed version, and link to the compatibility info you found.
  • If multiple major versions are compatible, prefer the latest stable version that supports the target React Native version.

Apply these version bumps to package.json as part of step 6.

8. Migrate to the Strict TypeScript API (target >= 0.87)

React Native 0.87 makes the Strict TypeScript API the default. When the upgrade crosses this boundary (current version < 0.87, target >= 0.87) and the project uses TypeScript (a tsconfig.json exists), type-checking of the project is affected and this step is required — do not silently skip it.

Ask the user which they prefer:

  1. Migrate now (recommended) — run the migrate-to-strict-api skill (/migrate-to-strict-api), which handles dependency compatibility, deep import rewriting, and known breaking type changes.
  2. Defer with the temporary opt-out — add "customConditions": ["react-native", "react-native-legacy-deep-imports"] to compilerOptions in tsconfig.json, keeping both entries. Tell the user this opt-out is temporary and due for removal in a future release.

For target versions below 0.87, or projects without TypeScript, skip this step and do not suggest the migration unprompted.

9. Post-upgrade checklist

After applying all changes, present the user with a checklist:

  • Run npm install or yarn install to update JS dependencies
  • Run cd ios && bundle exec pod install (or npx pod-install) to update native iOS dependencies
  • Run a clean build for Android: cd android && ./gradlew clean
  • Run a clean build for iOS: cd ios && xcodebuild clean
  • Run the app on both platforms to verify it launches
  • Run the project's test suite
  • (TypeScript, target >= 0.87) Run npx tsc --noEmit to confirm the Strict TypeScript API migration or opt-out from step 8
  • Review any conflict resolutions for correctness
  • Check the React Native changelog for additional breaking changes
  • Check the Upgrade Helper web UI for any supplementary notes

References

Consult these for version-specific migration guidance:

  • references/upgrade-helper-api.md — How to fetch diffs and version lists programmatically
  • migrate-to-strict-api — Companion skill for the Strict TypeScript API migration (default from 0.87)

來源與署名

來源:react-native-community/skills位於upgrade-react-native提交1fb0e08

授權條款: MIT

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架