SuperAPI AI 工具集

expo-sdk-upgrade

编程与开发

查看项目

更新于 10-18 18:02

技能介绍

expo-sdk-upgrade 是面向 React Native/Expo 项目的 SDK 与工具链升级技能,强调以"一次提交、整仓迁移、可验证"的方式推进版本升级,而不是零散改动。

用途:把仓库(单应用或多包仓库中的每个应用与共享包)从当前 Expo SDK 迁移到下一个 SDK;或在只涉及工具链时,把 Xcode、EAS 镜像、Android SDK 级别等构建工具链调整到新的水平。

触发条件与判定:仅当 npm 上目标 SDK(或其 sdk-<n> 标签)已是新 SDK,且达到仓库配置的发布时长(.npmrc 的 min-release-age,至少 7 天,按 npm 的分钟级口径计算),以及仓库从模块映射中取用的每个包和对应 React Native 版本的 @react-native/* 工具都满足该时长时,才认定为到期。check-sdk-trigger.mjs 报告 upgrade-due 表示需要迁移;报告 PASS 表示尚不需要。不接受预览版、beta、候选版或 next 版本,也不为 SDK 添加发布时长排除项。应用商店的最低 Xcode 或最低 targetSdk 要求同样构成触发条件(store-deadline),需要用工具链或 SDK 迁移来满足。

主要能力:

  • 一次性迁移:整个仓库在一个分支、一个提交中完成移动,保证仓库只有一个 React Native 版本,避免半迁移状态无法测试或回滚。
  • 受管包迁移方式:Expo 管理的包只通过 npx expo install expo@~<version> 再执行 npx expo install --fix 来更新,不手工修改 Expo 管理的版本说明,也不手工安装 react-native、React、Reanimated、Worklets、Skia、Gesture Handler。
  • 同步迁移项:与 SDK 一同移动的包括根工具(如 jest-expo、eslint-config-expo、@react-native/jest-preset、@react-native/eslint-plugin、@types/react、test-renderer,以及 SDK 的 jest-expo 所需的新 Jest 线时的 jest、babel-jest、@types/jest)、根 overrides、allowScripts、代码迁移、eas.json 中命名 SDK 的镜像、落后的 Android SDK 固定值和应用的依赖策略记录。
  • 不随 SDK 移动的工具:TypeScript(SDK 56 至 58 上为 6.0)、ESLint、Prettier 等保留各自的推迟触发规则,避免一次提交里混合两种迁移。
  • 就绪检查:在开分支前运行 check-sdk-alignment.mjs --target-sdk <next>,在当前 SDK 上以独立提交修复所有 FAIL(目标 SDK 将移除的 React Native 或 Jest API、schema 已删除的应用配置键、过旧的 Xcode),todo 项只留到迁移提交处理。
  • 工具链:Xcode 通过 Mac 上的 DEVELOPER_DIR 或 EAS 镜像选择(auto、sdk-<n> 或精确名称,不使用 latest),记录在检查器读取的同一位置;Android 的 compileSdk、targetSdk、minSdk 与 iOS deployment target 跟随 SDK,expo-build-properties 的固定值不得落后。SDK 57 搭配 Xcode 27 需要 ios.enableSceneSupport(SDK 58 再移除),并提供模板脚本 addSceneSupport 及其测试。
  • 验证闭环:反复运行对齐检查直至 PASS,执行 npx expo install --check、npx expo-doctor、npm ls 检查 react/react-native/react-native-reanimated/react-native-worklets 是否单一版本,运行项目门禁,在指定的 iOS 模拟器和 Android 模拟器上完成干净的 prebuild 与 Release 构建(或 EAS 预览构建),跑 E2E 与视觉基线,并逐条查看差异。不得为了让门禁变绿而放宽门禁或直接接受新的 golden/截图基线,每个差异都要由变更清单解释并以 Gate-Change 尾注提交。
  • 协作控制:开分支前需与开发者确认(给出默认建议:在分支上开始),合并、推送、EAS 构建或上传前必须获得明确同意,沉默不算同意。

使用方式:按工作流先阅读升级策略,运行触发器检查(可在线获取 npm 事实或使用保存的事实文件),从干净的当前状态开始并扫描就绪性,通知开发者后阅读目标 SDK 的变更说明与操作手册,按步骤开分支、安装 SDK、一次命令安装根工具、设置 overrides、完成代码迁移、更新 EAS 镜像与平台固定值、更新依赖策略;仅工具链变更时阅读工具链文档。随后进入验证闭环,最后单提交并附 Gate-Change 尾注与报告。

适用场景:需要对 Expo 应用做整仓 SDK 升级的团队;多包仓库需要同步多个应用的情况;需要把 Xcode 或 Android 构建级别与 SDK 对齐或满足应用商店期限的情况。

限制:技能依赖固定的触发规则与检查脚本,版本事实需阅读新版发布说明与文档而非凭记忆;它不涵盖 TypeScript、ESLint 等被推迟工具的迁移;安装 Xcode、许可证、模拟器运行时、JDK 和使用 sudo 属人工步骤;资料未提供该技能的收费、价格或平台信息。