Community编程与开发github.com

bharath2020/expo-navigation-migration

分析现有 Expo 或 React Native 仓库的导航实现,并规划逐步迁移到 Expo SDK 58 导航、Expo Router(React Navigation 和 react-native-screens)和/或 @expo/ui(SwiftUI、Jetpack Compose),支持功能标志或无标志迁移,最终实现干净退出。同时提供导航模式目录,包含栈导航、返回拦截、标签页、iPad 侧边栏和可折叠区域、模态、底部弹出面板、导航栏按钮、溢出菜单、大标题、滚动隐藏导航栏、底部工具栏、Surface Duo、iPhone Duo 和折叠屏等模式的验证状态和已知差距。适用于评估应用的导航、规划迁移到 Expo Router、React Navigation 或 @expo/ui、将现有 React Navigation 应用迁移到更原生元素和稳定深度链接(包括不采用 Expo 并保留普通 React Navigation 的裸应用),或在 Expo 58 上选择或实现这些模式时使用。

expo-navigation-migration 是什么?

该技能用于分析现有 Expo 或 React Native 应用的导航实现,并规划逐步迁移到 Expo SDK 58 的导航系统,包括 Expo Router(基于 React Navigation 和 react-native-screens)或 @expo/ui(iOS 的 SwiftUI 和 Android 的 Jetpack Compose)。它支持在功能标志下或直接切换的方式进行迁移,最终实现干净退出。该技能还提供详尽的导航模式目录,涵盖栈导航、返回拦截、标签页、iPad 侧边栏和可折叠区域、模态对话框、底部弹出面板、导航栏按钮、溢出菜单、大标题、滚动隐藏导航栏、底部工具栏、Surface Duo、iPhone Duo 和折叠屏等模式,并注明每个模式的验证状态和已知问题。用户可根据请求类型(分析、规划、查找模式)执行对应工作流:先分析仓库中现有导航信号,然后根据分析结果生成包含目标选择、标志使用策略、API 映射和分步实施步骤的详细迁移计划,或直接从目录中查询特定导航模式的实现参考和注意事项。该技能适用于 Claude Code、Cursor 等 AI 代理环境,用户可自然语言描述需求(如“分析此仓库的导航如何工作”、“规划迁移到 Expo Router”、“如何实现侧边栏布局?”等),技能会自动执行相应的分析脚本、填充报告模板、生成计划或查找模式文件,所有代码变更需用户明确请求,技能仅负责规划和展示建议。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/bharath2020/expo-navigation-migration-skill/tree/HEAD/expo-navigation-migration

Installed? Explore more 编程与开发 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Expo 导航迁移(SDK 58)

三个任务。根据请求选择;迁移计划需要按顺序执行所有三个任务。

请求操作
“此仓库中的导航是如何实现的?”分析
“规划迁移”、“我们能加个标志吗?”、“React Navigation 还是 @expo/ui?”分析,然后规划
“我们正在使用 React Navigation,并希望使用更原生元素和稳定的导航及深度链接库”分析,然后规划,使用现有的 React Navigation 方案文档
“如何构建侧边栏/底部弹出面板/Duo 布局?”、“X 能工作吗?”在目录中查找

本文档全篇使用的目标名称:

  • React Navigation 表示基于 react-native-screens 的 Expo Router。从 SDK 56 开始 expo-router 不再依赖 @react-navigation/*,而是 Fork 了其构建所需的部分。SDK 58 移除了大部分被 Fork 的 API。
  • 普通 React Navigation 表示不包含 Expo Router 的 @react-navigation/* 7.x。
  • @expo/ui 表示 iOS 上的 SwiftUI 和 Android 上的 Jetpack Compose。

仅读取目标仓库。本技能负责规划;除非用户单独请求,否则不会更改任何应用代码。

Expo 每次 SDK 都会变化。此处列出的 API 事实于 2026-11-02 针对 SDK 58 进行了检查。对于目录未显示为已验证的任何即将依赖的 API,请访问 https://docs.expo.dev/versions/v58.0.0/ 获取信息。

分析

  1. 运行 node <skill>/scripts/inventory-navigation.mjs <repo-root>。它仅读取仓库,并输出带有 path:line 位置的信号。当某个信号显示 truncated 大于 0 时,使用 --max-locations 200 重新运行。
  2. 遵循 references/analysis.md。填写 templates/analysis-report.md。

当报告中的每一行都有带证据的值,或说明已搜索但未找到,并且每个清单信号都已通过阅读其代码进行确认或排除时,分析任务完成。

规划

遵循 references/migration-planning.md 进行规划。该文档会引用:

填写 templates/migration-plan.md。计划始终涵盖带标志的切换、无标志的切换、每个可单独发布和验证的有序步骤,以及一个干净退出步骤,用于移除创建的标志和被替代的内容。计划需要给出一个基于此仓库原因的推荐。该推荐可以是保留当前的导航所有者;当仅 SDK 发生变化时,计划说明没有任何需要标记的内容以及原因。

查找模式

references/pattern-catalog.md 列出了每一种场景及其对应的文件。每个文件都提供了针对 iOS 和 Android 两个目标平台的、来自工作原型的代码,以及每个平台的状态、注意事项和迁移说明。请按原样引用状态词汇:已验证 表示在模拟器或仿真器上测试过,未使用物理硬件。

templates/ 目录存放可复用的文件:用于侧边栏部分、侧边栏位置和导航栏可见性的本地模块、导航辅助层,以及铰链和分屏组件。本地模块需要开发构建。

相关技能