Expo 範例
expo/examples 是 Expo 官方收錄約 70 個整合範例 的函式庫 — 目錄命名為 with-<函式庫>(例如 with-stripe、with-maps),每個範例圍繞 一個 函式庫或服務建置。這些並非完整應用程式:它們是 受管理的 專案(沒有 ios//android/ 目錄 — 原生設定透過設定外掛程式進行),且典型的範例是 單一畫面,約 100–200 行程式碼。從中挖掘出標準的整合 模式 — 依賴套件集、app.json 設定外掛程式,以及 Expo 針對當前 SDK 維護的最小接線 — 並將其調適到使用者的應用程式中。不要期望能從中直接複製應用程式架構。
在手動整合之前,應先查閱範例。(種類:全端、展示、起手範本 — 標示在 ./references/catalog.md 中。)
兩種模式
- 靈感啟發 / 調適(最常見)— 使用者已有專案。找到相符的範例,閱讀其關鍵檔案,並將 模式 套用到他們的程式碼中。
- 建置框架 — 全新專案。直接從範例開始一個新專案。
工作流程
1. 尋找正確的範例
將使用者的需求對應到範例名稱(例如付款 → with-stripe、驗證 → with-clerk)。./references/catalog.md 是一個分類的快照,可快速初步判斷 — 但它會過時,因此請對照即時清單確認:
# 即時範例名稱:
gh api repos/expo/examples/contents --jq '.[] | select(.type=="dir" and (.name|startswith(".")|not)) | .name'
# 別名(已重新命名)+ 已棄用(已刪除/移動)的範例 — 在推薦前檢查:
gh api repos/expo/examples/contents/meta.json --jq '.content' | base64 -d
meta.json 是判斷哪些範例已重新命名或已棄用(已棄用的範例會從儲存庫樹中移除,但仍列在此處,每個都附有 message)的真相來源。如果某個範例在其 deprecated 映射中,請不要推薦它 — 請依照 message 指引到現代路徑。如果它在 aliases 中,請使用 destination。
2a. 靈感模式 — 在不觸及使用者專案的情況下進行研究
常見情況:使用者已有應用程式,並想了解 Expo 如何處理某項功能。將範例作為參考來閱讀,並手動套用模式 — 切勿在他們的專案上直接建置框架。
首先,一次呼叫列出整個範例。 整合程式碼通常嵌套(例如 Stripe 的伺服器路由位於 app/api/ 中),因此僅列出第一層會遺漏重要的檔案:
gh api 'repos/expo/examples/git/trees/master?recursive=1' \
--jq '.tree[].path | select(startswith("with-stripe/"))'
然後優先讀取高訊號的檔案: README.md(設定)→ package.json(依賴套件)→ app.json(設定外掛程式/權限)→ 清單揭示的整合程式碼 → .env(所需的機密)。每個檔案:
gh api repos/expo/examples/contents/with-stripe/utils/stripe-server.ts --jq '.content' | base64 -d
# 無 gh?原始 URL(分支是 master):
curl -s https://raw.githubusercontent.com/expo/examples/master/with-stripe/utils/stripe-server.ts
需要讀取超過兩個檔案? 許多整合分散在伺服器路由、客戶端提供者和設定(Stripe 就是如此)。跳過逐檔案呼叫 — 將整個範例拉取到一個可拋棄/被 .gitignore 忽略的目錄(不是使用者的專案),然後使用 Grep/Read 自由閱讀,再手動套用:
npx degit expo/examples/with-stripe /tmp/expo-ref/with-stripe # 乾淨複本,無 git 歷史
# 無 degit 時的備用方案(稀疏檢出,無需完整 ~64 MB 複製):
git clone --depth 1 --filter=blob:none --sparse https://github.com/expo/examples.git /tmp/expo-ref/examples \
&& (cd /tmp/expo-ref/examples && git sparse-checkout set with-stripe)
從那裡使用 Grep/Read 讀取;完成後刪除暫存目錄。
2b. 建置框架模式 — 從範例開始新專案
npx create-expo --example with-stripe # 簡寫:npx create-expo -e with-stripe
bun create expo --example with-stripe # 使用 bun
3. 調適到使用者的應用程式中 — 非破壞性(關鍵)
當使用者已有應用程式時,僅添加範例引入的內容;切勿覆寫他們的設定。
- 版本對齊 — 不要複製鎖定的版本。 範例追蹤最新的 SDK,因此它們的
package.json鎖定版本無法匹配較舊的專案。僅使用npx expo install <pkg>添加缺少的依賴套件(它會解析 SDK 正確的版本),而不是複製確切的版本。 - 合併設定,不要取代它。 僅添加使用者缺少的、範例引入的
app.json/app.config.*外掛程式和權限 — 保持他們現有的設定區塊完整。 - 移植整合程式碼。
- 根據範例的
.env形狀重新建立環境變數 — 它包含佔位符,而非運作中的機密。
完成條件:當整合程式碼已移植,且其所需的每個依賴套件、設定外掛程式、權限和環境變數都已在使用者的應用程式中妥善設定 — 而不是僅僅看起來已接線。
注意事項
- 預設分支是
master, 不是main(影響原始 URL 和稀疏檢出)。 - 一鍵部署。 每個範例都有一個啟動 URL:
https://launch.expo.dev/?github=https://github.com/expo/examples/tree/master/<範例>。
相關技能
- 原生 UI 元件(@expo/ui 套件)→
expo-ui - 樣式設計與原生感受畫面 →
expo-native-ui - 導航與路由 →
expo-router - 編寫原生模組 →
expo-module - 在採用最新 SDK 範例之前升級 SDK →
expo-upgrade
參考資料
./references/catalog.md— 範例函式庫的分類快照,供快速初步判斷。
提交回饋
如果您在此技能中發現錯誤、誤導或過時的資訊,請報告以便 Expo 改進:
npx --yes submit-expo-feedback@latest --category skills --subject "expo-examples" "<可操作的回饋>"
僅在您有具體且可操作的事項需要報告時才提交。請盡可能包含相關的上下文。 如果 AI 代理程式反覆失敗,或者使用者必須接手 Expo 任務,請載入 expo-skill-feedback 技能並遵循其評估候選流程,而不是重複使用上述命令。