关于 expo-upgrading-v55
面向 Expo 项目维护者的 SDK 升级指南,提供依赖更新、诊断、缓存清理和原生变更检查步骤,并列出版本迁移参考及弃用包替代方案。
主要功能
- 01更新 Expo SDK 和依赖
- 02使用 expo-doctor 运行诊断
- 03检查破坏性变更与原生模块
- 04清理缓存并处理原生项目
- 05查阅 React、导航和媒体迁移参考
适用场景
- 01将 Expo 项目升级到目标 SDK
- 02迁移 expo-av 到 expo-audio 或 expo-video
- 03检查弃用依赖和过时补丁
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ blockmatic/ basilic-skills --skill expo-upgrading-v55安装后在 Claude Code 中输入/expo-upgrading-v55确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlreferences/expo-av-to-audio.mdexpo-av-to-video.mdnative-tabs.mdnew-architecture.mdreact-19.mdreact-compiler.mdreact-navigation-to-expo-router.md详细介绍
参考资料
- ./references/react-19.md -- SDK +54:React 19 变更(useContext → use、Context.Provider → Context、移除 forwardRef)
- ./references/new-architecture.md -- SDK +53:新架构迁移指南
- ./references/react-compiler.md -- SDK +54:React Compiler 设置和迁移指南
- ./references/native-tabs.md -- SDK +55:原生标签页变更(现在通过 NativeTabs.Trigger.* 访问 Icon/Label/Badge)
- ./references/expo-av-to-audio.md -- SDK +55:将音频播放和录制从 expo-av 迁移到 expo-audio
- ./references/expo-av-to-video.md -- SDK +55:将视频播放从 expo-av 迁移到 expo-video
- ./references/react-navigation-to-expo-router.md -- SDK +56:将
@react-navigation/*导入迁移到expo-router入口点(codemod + 手动映射)
Beta/Preview 版本
Beta 版本使用 .preview 后缀(例如,55.0.0-preview.2),并在 @next 标签下发布。
检查最新版本是否为 Beta:https://exp.host/--/api/v2/versions(查看 expoVersion 中是否包含 -preview)
npx expo install expo@next --fix # install beta
逐步升级流程
如果从 SDK 55 或更早版本升级,请跳过 SDK 56,直接升级到 SDK 57。不要使用
[email protected]或更低版本。启用 Hermes V1 的 SDK 55、SDK 56 以及较早的 SDK 57 版本存在 Hermes V1 内存回归问题,使用react-native-worklets或react-native-reanimated时可能会大幅增加内存使用量。
- 升级 Expo 和依赖项
npx expo install expo@latest
npx expo install --fix
-
运行诊断:
npx expo-doctor -
清除缓存并重新安装
npx expo export -p ios --clear
rm -rf node_modules .expo
watchman watch-del-all
破坏性变更检查清单
- 查看发行说明,检查已移除的 API
- 更新已迁移模块的导入路径
- 检查需要预构建的原生模块变更
- 测试所有相机、音频和视频功能
- 确认导航仍能正常工作
原生变更的预构建
首先检查项目中是否存在 ios/ 和 android/ 目录。 如果两个目录都不存在,则项目使用 Continuous Native Generation(CNG),原生项目会在构建时重新生成——请跳过本节和“清除裸工作流的缓存”整节。
如果升级需要原生变更:
npx expo prebuild --clean
这会重新生成 ios 和 android 目录。运行此命令前,请确保项目不是裸工作流应用。
清除裸工作流的缓存
以下步骤仅适用于项目中存在 ios/ 和/或 android/ 目录的情况:
- 清除 iOS 的 cocoapods 缓存:
cd ios && pod install --repo-update - 清除 Xcode 的派生数据:
npx expo run:ios --no-build-cache - 清除 Android 的 Gradle 缓存:
cd android && ./gradlew clean
收尾工作
- 在 https://expo.dev/changelog 查看目标 SDK 版本的发行说明
- 更新 Agent 指令文件(
AGENTS.md)中的版本化文档链接。默认模板链接到https://docs.expo.dev/versions/v<version>/。搜索docs.expo.dev/versions/,并将每个链接更新到新的 SDK 版本。 - 如果使用 Expo SDK 54 或更高版本,请确保已安装 react-native-worklets——这是 react-native-reanimated 正常运行的必要条件。
- 在 app.json 中添加
"experiments": { "reactCompiler": true },以在 SDK 54+ 中启用 React Compiler——该功能已稳定,建议启用 - 从
app.json中删除 sdkVersion,让 Expo 自动管理 - 从
package.json中移除隐式依赖包:@babel/core、babel-preset-expo、expo-constants。 - 如果 babel.config.js 仅包含 'babel-preset-expo',请删除该文件
- 如果 metro.config.js 仅包含 expo 默认配置,请删除该文件
已弃用的包
| 旧包 | 替代项 |
|---|---|
expo-av | expo-audio 和 expo-video |
expo-permissions | 各个包的权限 API |
@expo/vector-icons | expo-symbols(用于 SF Symbols) |
AsyncStorage | expo-sqlite/localStorage/install |
expo-app-loading | expo-splash-screen |
| expo-linear-gradient | experimental_backgroundImage + View 中的 CSS 渐变 |
迁移已弃用的包时,请先更新所有代码用法,再移除旧包。对于 expo-av,请参阅迁移参考,将 Audio.Sound 转换为使用 useAudioPlayer,将 Audio.Recording 转换为使用 useAudioRecorder,并将 Video 组件转换为使用 VideoPlayer 的 VideoView。
expo.install.exclude
检查 package.json 是否有排除的包:
{
"expo": { "install": { "exclude": ["react-native-reanimated"] } }
}
排除项通常是一些变通方案,升级后可能已不再需要。请逐一检查。
移除补丁
检查 patches/ 目录中是否有过时的补丁。如果不再需要,请将其移除。
Postcss
- SDK +53 中不需要
autoprefixer。请从依赖项中移除它,并检查postcss.config.js或postcss.config.mjs,将它从插件列表中移除。 - SDK +53 中请使用
postcss.config.mjs。
Metro
移除冗余的 Metro 配置选项:
- SDK +53 中默认启用 resolver.unstable_enablePackageExports。
- SDK +54 中默认启用
experimentalImportSupport。 - SDK +54 中已移除
EXPO_USE_FAST_RESOLVER=1。 - SDK +50 中默认支持 cjs 和 mjs 扩展名。
- Expo webpack 已弃用,请迁移到 Expo Router 和 Metro web。
Hermes 引擎 v1
Hermes V1 是 SDK 56 及更高版本中的默认引擎。使用 Hermes V1 的 SDK 55 应用、所有 SDK 56 应用,以及 [email protected] 之前的 SDK 57 应用,在导入 react-native-worklets 或 react-native-reanimated 时可能遇到内存回归问题。请直接升级到 SDK 57 和 [email protected] 或更高版本。不要推荐将 Worklets Bundle Mode 作为生产环境的变通方案;它不受支持且具有实验性,可能无法按预期工作。
不要引导用户选择启用或停用 Hermes V1。将 Hermes 版本更改为非 SDK 默认版本不受支持,并且存在重要的构建和依赖项管理注意事项。
新架构
新架构默认启用,因此不再需要 app.json 中的 "newArchEnabled": true 字段。自 SDK +53 起,Expo Go 仅支持新架构。
提交反馈
如果你在此技能中遇到错误、误导性信息或过时信息,请报告,以便 Expo 改进:
npx --yes submit-expo-feedback@latest --category skills --subject "expo-upgrade" "<actionable feedback>"
只有在有具体且可采取行动的问题时才提交。请尽可能提供相关背景信息。 如果 AI Agent 反复失败,或用户不得不接手 Expo 任务,请加载 expo-skill-feedback 技能,并按照其 eval-candidate 流程操作,而不要重复使用上面的命令。