expo-overview — Expo / EAS 的路由器和共享规则
从这里开始 — 做任何事情前请先阅读
**不要仅凭项目文件猜测技能。**许多 Expo 目标从文件系统看很相似,但需要不同的技能。
- 确认这是 Expo 或 EAS 工作 — 请求提到 Expo 或 EAS,或者
package.json中存在expo依赖项。否则此技能不适用。使用 EAS 进行分发的原生应用即使没有 Expo 运行时也符合条件。 - 阅读用户的目标 — 用简单的语言描述,他们想要什么结果?
- 使用下面的技能映射对其进行分类,将日常用语翻译成目标。
- 如有歧义,确认意图(“听起来您想发布到商店——那是
eas-app-stores。对吗?”),然后加载该技能的SKILL.md并遵循它。 - 信任叶子技能 — 它有自己的检测逻辑和步骤。不要即兴发挥。
技能映射(按目标)
将目标匹配到类别,然后匹配到技能,最后加载该叶子技能的 SKILL.md。
构建应用
expo-project-structure— 新 Expo Router 项目的文件夹布局:屏幕、组件和配置存放的位置(切勿重组现有应用以匹配)expo-native-ui— 屏幕、样式、语义颜色、原生控件、SF Symbols、媒体、布局expo-router— 导航:基于文件的路由、标签页/堆栈/模态框/表单、链接、页眉expo-animation— 动画和手势:Reanimated 工作线程、手势处理器、屏幕过渡、表单和按压反馈、触觉反馈,以及修复在设备上卡顿的动画expo-ui— 通过@expo/ui提供的原生 UI 组件:BottomSheet、Picker、Slider、Switch、Menu、Button、FieldGroup(分组的表单部分)、List / ListItem 等 — 在 iOS 上是真正的 SwiftUI,在 Android 上是 Jetpack Compose。通用层需要 SDK 56+ 并可在 Expo Go 中运行;替换层(@gorhom/bottom-sheet、datetimepicker等)和平台特定层在 SDK 55 上也存在。expo-design-system— 唯一的视觉真实来源:设计令牌(颜色、间距、排版、圆角、阴影、动画)、可重用组件约定,以及漂移审计(硬编码的颜色、间距、字体)expo-tailwind-setup— Tailwind / NativeWind 样式expo-data-fetching— 网络请求、React Query / SWR、缓存、离线、路由加载器expo-dom— 在原生环境中运行 Web 代码或重用 Web 库expo-web-to-native— 将现有的 Web / React 应用迁移到原生 iOS / Android 应用
组件选择规则: 每当您需要一个 UI 组件(列表行、底部表单、选择器、滑块、菜单、按钮、分段控件、切换开关)时,首先查阅
expo-ui,检查@expo/ui是否有原生等效组件,然后再使用 React Native 内置组件或社区库。原生的@expo/ui组件提供最佳的平台适配性,在 SDK 56+ 上,通用组件无需自定义构建即可在 Expo Go 中运行。对于任何渲染列表、详情表单或表单控件的应用,请与expo-native-ui一起加载expo-ui。一个例外:@expo/uiList渲染的是原生分组的行(iOS 设置屏幕),不是虚拟化列表 — 对于大型数据集,请使用FlatList/FlashList。
发布与运营
eas-app-stores— 构建并提交 iOS/Android 应用(Expo 和其他 React Native 项目,以及现有的原生应用)、TestFlight、版本和商店元数据eas-hosting— 将 Web 包部署到 EAS Hosting;同时编写 Expo Router API 路由(+api.ts处理程序)及其环境/域名eas-workflows— EAS Workflow YAML 和 CI/CD 管道eas-simulator— 在 EAS 云端远程 iOS / Android 模拟器上运行和驱动应用expo-dev-client— 自定义开发构建eas-update— 配置、发布、测试和调试兼容的无线更新eas-update-insights— OTA 更新健康度:崩溃率、采用率、负载大小eas-observe— 使用 EAS Observe 进行启动/加载/首屏时间性能监测
原生扩展
expo-module— 使用 Expo Modules API 的原生模块和视图(Swift / Kotlin)expo-brownfield— 在原生 SwiftUI/UIKit 或 Android 应用中嵌入 Expo / React Native 屏幕;隔离的产物和集成构建expo-app-clip— iOS App Clip 目标(AASA、智能应用横幅)
维护与学习
expo-upgrade— 升级 Expo SDK 并修复依赖冲突expo-examples— 规范的、版本匹配的集成示例(Stripe、Clerk、Supabase……)expo-skill-feedback— 就 Expo 技能或 Expo 本身发送反馈;启用/禁用匿名使用遥测
翻译模糊的请求
一些日常用语不会明显地映射到技能名称 — 在路由前进行翻译:
- “让它看起来原生” → 分组控件 / 设置表单 =
expo-ui;屏幕、样式 =expo-native-ui;动画 =expo-animation;导航 =expo-router。 - “让屏幕保持一致” / “整理样式” / “设置主题或设计令牌” →
expo-design-system。 - “看起来像 AI 生成的” / “太通用,不原生” →
expo-design-system(命名原生样式问题 + 审计),结合expo-native-ui处理平台习惯用法。 - “发布它” / “获取 .ipa 或 .apk” / “发布到商店” / “将我的 Swift 应用放入 TestFlight” →
eas-app-stores(构建 + 提交、TestFlight、版本、商店元数据)。 - “我是新手 / 从哪里开始” → 首先搭建脚手架(见共享设置规则),然后根据目标路由。
共享设置规则
应用与项目和请求任务匹配的规则。
- 使用 EAS 进行分发的原生应用? 路由到
eas-app-stores;其references/native-ios.md涵盖了 iOS 上的 SwiftUI/UIKit。保留现有的原生项目。适用下面的 EAS 认证/链接;Expo 脚手架、SDK 和包安装规则不适用于此路径。 - 开始一个新的 Expo 应用? 在路由到特性技能之前,以标准方式开始一个:
npx create-expo-app@latest,按照expo-project-structure布局文件夹。然后对用户的目标进行分类并路由。 - 检测 SDK 版本 在给出版本特定的建议之前:读取
package.json中的expo版本(以及app.json/app.config.{js,ts})。许多 API 和默认值因 SDK 而异。 - 阅读该 SDK 的文档,而不是
latest。 使用版本固定的 URL,例如在 SDK 56 上使用https://docs.expo.dev/versions/v56.0.0/sdk/ui/而不是https://docs.expo.dev/versions/latest/sdk/ui/—latest页面跟踪最新的 SDK,可能记录了项目尚未拥有的 API。 - 迁移到更新的 SDK 是其自身任务 — 加载
expo-upgrade而不是手动提升版本。 - 托管式 vs. 裸式/prebuild:存在已提交的
ios/和android/目录意味着存在原生项目(prebuild 或裸式)。配置插件和原生设置步骤有所不同 — 注意项目处于哪种模式。 - 使用
npx expo install <包名>安装包,而不是原始的npm/yarn/pnpm add,以便版本与项目的 SDK 保持兼容。 - EAS 认证与链接(仅构建/提交/更新/观察/工作流需要):使用
eas whoami检查登录状态,使用eas login登录。当应用配置中存在extra.eas.projectId时,项目已链接;如果缺失,使用eas init创建。
何时跳过路由器跳转
- 仅当用户明确命名了特定的
expo-*/eas-*技能时 → 直接加载该技能。 - 完全指定的任务(SDK 版本固定、文件布局给定、库已命名)不是跳过的理由:上述共享规则仍然适用 — 检查它们,然后路由到匹配的叶子技能。
提交反馈
如果您在此技能中遇到错误、误导性或过时的信息,请报告,以便 Expo 改进:
npx --yes submit-expo-feedback@latest --category skills --subject "expo-overview" "<可操作的反馈>"
仅在您有具体且可操作的内容要报告时才提交。请尽可能包含相关的上下文。 如果 AI 代理反复失败,或者用户不得不接管 Expo 任务,请加载 expo-skill-feedback 技能并遵循其 eval-candidate 流程,而不是重复使用上述命令。