症狀:Expo Go 原生模組報錯。 若專案依賴的原生程式碼不在 Expo Go 內建範圍,改用 development build(包含你專案原生依賴的練習版 App),不要一直重裝 Expo Go。
適用條件:你可以繼續用 Windows 編輯和雲端建置;只有需要在本機跑 iOS 模擬器或用 Xcode 除錯時,才需要準備 macOS。
本文適合跟著課程製作 Expo 或 React Native App,第一次遇到原生模組錯誤的學生。你可以用下面的症狀判斷是否該離開 Expo Go。
如果你只有 Windows 或受管理的學校電腦,也能分清實體 iPhone、雲端建置和 Mac 模擬器各自能做什麼。
先辨認錯誤類型:不是所有報錯都代表 Expo Go 不支援
先看錯誤發生在哪個階段:套件安裝時、JavaScript 執行時,還是 App 呼叫原生功能時。只有第三種情況,才特別需要檢查 Expo Go 是否缺少對應的原生實作。原生模組可以把 JavaScript 和手機系統功能接起來,例如相機、藍牙或生物辨識功能。
| 你看到的狀況 | 優先檢查什麼 | 建議處理方式 |
|---|---|---|
| 套件安裝失敗 | 套件管理器訊息、套件名稱與版本相容性 | 先修正安裝錯誤,再測試 App;此時還不能斷定 Expo Go 缺少原生模組 |
| App 能啟動,但畫面或邏輯出錯 | 錯誤堆疊、JavaScript 程式碼與呼叫資料 | 按一般程式錯誤排查,不要先重建原生 App |
| 呼叫功能時提示找不到原生實作 | 模組是否需要原生程式碼、Expo Go 是否內建支援 | 查 Expo 支援清單和套件文件;確定缺少時轉用 development build |
把套件裝進專案,不等於把原生程式碼加進 Expo Go。Expo Go 是預先編譯的 App,只支援固定範圍的原生庫;可以先核對Expo 官方第三方套件支援清單。若套件要求的原生程式碼不在其中,重裝套件或反覆清除快取通常不會讓 Expo Go 多出這項能力;Expo 對 Expo Go 與 development build 的說明也指出,這類情況應考慮建立自己的 development build。
依照原生變更處理:分清何時要重新建置
development build 不是替 Expo Go 加裝外掛,而是為你的專案建置一個開發用 App,讓它帶有專案需要的原生依賴。Expo 的開發構建入門指南說明了這種開發方式;切換之後,新增原生套件或改動原生設定,仍要更新相應的建置。
用這個判斷順序,避免把每次程式修改都當成重建理由:
- 先確認模組需求。查套件文件,確認它是否需要原生程式碼,以及是否需要額外設定。
- 比對最近改動。只改 JavaScript 畫面、事件處理或一般邏輯時,先在目前的開發 App 中測試。
- 有原生變更就重新建置。新增原生依賴或改變原生設定後,重新產生包含新內容的 development build,並在目標裝置安裝。
- 核對執行中的 App。確認你啟動的是剛建置的開發版,而不是舊版 Expo Go 或之前安裝的 App。
如果只改 JavaScript,卻找不到功能,先確認程式是否真的執行到呼叫位置;如果新增原生依賴後仍提示找不到實作,就檢查是否重新建置、重新安裝。遇到需要自訂原生程式碼的課程內容,可再查Expo 自訂原生程式碼指南。
只有 Windows 時,按測試目標選路線
Windows 不會阻止你編輯 Expo 專案,也不代表你必須立刻租用 Mac。要先分清楚三件事:寫程式、建立 iOS App、在 iOS 模擬器中操作 App。EAS Build 是雲端代建置服務;它能替專案建置 iOS App,但不會把 iOS 模擬器變成 Windows 上的本機程式。
| 路線 | 可以完成什麼 | 不能代替什麼 | 適合情況 |
|---|---|---|---|
| Expo Go | 練習 JavaScript、測試內建支援的功能 | 不會補上未內建的原生程式碼 | 模組在支援範圍內,課程目前只要求基礎練習 |
| EAS Build 雲端建置 | 從雲端建立 iOS 建置成果 | 不會在 Windows 本機開啟 iOS 模擬器,也不是 Xcode 除錯環境 | 需要建立 iOS development build,但手邊沒有 Mac |
| 實體 iPhone | 在真實裝置上測試相容的開發版 | 不等同於模擬器,也不提供 Xcode 的本機除錯介面 | 課程允許使用手機,且你能依流程安裝開發版 |
| 學校 Mac 或遠端 Mac | 在 macOS 上使用 Xcode 與 iOS 模擬器驗收 | 不會自動修正專案程式碼或依賴設定 | 課程要求模擬器、Xcode 或 macOS 本機操作 |
Expo 說明了EAS Build 的 iOS 模擬器建置流程,而Expo 的 iOS 模擬器指南明確限定模擬器在 macOS 上執行。因此,沒有 Mac 時,你仍可在 Windows 編輯專案,並按官方流程使用 EAS Build;但不能把雲端建置誤認成 Windows 本機模擬器。
依課程要求選擇即可:若只是完成 JavaScript 練習,先留在 Expo Go;若缺少原生模組而又有合適的 iPhone,考慮 development build 加實體裝置;若作業明確要求模擬器或 Xcode 操作,才安排 macOS 環境。
常見問題:確認升級時機與設備限制
套件安裝成功,Expo Go 為何仍找不到功能?
套件可能已加入 JavaScript 專案,但對應的原生程式碼不在 Expo Go 內。先核對官方支援清單與套件文件,確定需要原生實作後,再建立 development build,不必重複安裝同一套件。
什麼時候才需要從 Expo Go 換成 development build?
當專案要用 Expo Go 未內建的原生套件、需要自訂原生程式碼,或課程要求測試這些原生功能時,就該考慮升級。若只改 JavaScript,通常可以先沿用目前的開發流程;改動原生依賴或設定後,才要重新建置。
沒有 Mac,能不能建立 iOS development build?
你可以在 Windows 編輯專案,並依Expo 的 development build 使用指南安排開發版;若要由 EAS 雲端建置,應以官方的建置說明核對目前流程。雲端建置不等於 Windows 本機模擬器;需要模擬器時仍須使用 macOS。
要怎樣用 iOS 模擬器驗收 development build?
先準備可使用的 macOS 與 Xcode,再依官方模擬器建置流程產生對應的 App,安裝並啟動。接著確認原生模組能呼叫、JavaScript 修改有反映,而且執行中的 App 符合課程要求。Windows 本機不能直接執行 iOS 模擬器。
修好後逐項驗收:確認 App 和課程要求一致
建置成功只代表產生了 App,不代表功能已經通過測試。請用同一個課程專案逐項檢查:
- 專案改動已保存:確認依賴與程式碼修改都在目前使用的專案目錄,而不是另一份副本。
- 建置方式符合目標設備:供實體 iPhone 使用的 App,不能當作模擬器建置使用;反過來也一樣。
- 開發版確實啟動:確認裝置或模擬器開啟的是最新 development build,而不是 Expo Go。
- 原生功能可以呼叫:實際操作課程要求的功能,觀察是否仍出現找不到原生實作的錯誤。
- JavaScript 修改有反映:改動一段容易辨認的介面或文字,再確認目前 App 是否顯示新內容。
- 敏感資料沒有公開:不要把帳號憑證或專案密鑰寫進公開程式碼庫。若專案使用建置環境變數,按Expo 的環境變數文件確認設定方式和用途。
若只有原生功能失敗,回頭查依賴與建置內容;若整個 App 無法啟動,則另外檢查建置成果、裝置相容性和啟動錯誤。這樣能避免把所有問題都算到 Expo Go 頭上。
需要模擬器時再準備 Mac:按課程邊界決定
如果課程只要求編輯程式碼,或雲端建置加實體 iPhone 已足夠,Windows 加現有設備可能更合適。若作業要求 Xcode 除錯、在 iOS 模擬器中操作,或檢查只有 macOS 環境才能完成的部分,就需要準備 Mac;校內設備可用時,先確認課程時段與使用權限。
遠端 Mac 可以補上 macOS、Xcode 與模擬器這一段,但你仍要確認專案傳輸方式、連線條件和課程是否接受遠端操作。你可以先查看遠端 Mac 環境方案;若在香港,也可參考香港地區的遠端 Mac 方案資訊。
和 Windows 加雲端建置相比,這條路線多了本機模擬器與 Xcode 驗收能力;但 Windows 無法直接提供 iOS 模擬器、雲端建置不包含本機 Xcode 操作、學校 Mac 也可能受借用時段限制。若課程確實卡在模擬器或 Xcode,而你手邊沒有可用的 Mac,租用 MACCOME 的遠端 Mac 可以先補足這段 macOS 工作;若只是練習一般 JavaScript,則不必為了 Expo 專案提早租用。