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 worklets、Gesture Handler、畫面轉場、工作表與按壓回饋、觸覺回饋,以及修正在裝置上卡頓的動畫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-ui與expo-native-ui一起載入。一個例外:@expo/ui的List呈現原生分組列(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— 設定、發佈、測試與偵錯相容的 OTA 更新eas-update-insights— OTA 更新健康度:當機率、採用率、套件大小eas-observe— 使用 EAS Observe 進行啟動/載入/TTI 效能監控
以原生方式擴充
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(以及app.json/app.config.{js,ts})中的expo版本。許多 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,而不是手動更新版本。 - Managed 與 Bare/Prebuild:存在已提交的
ios/和android/目錄表示原生專案已存在(prebuild 或 bare)。設定檔外掛程式和原生設定的步驟會有所不同——請注意專案屬於哪一種。 - 使用
npx expo install <pkg>安裝套件,不要使用原始的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 技能並遵循其評估候選流程,而不是重複使用上述指令。