安裝、設定及整合本機模擬器套件

您可以為不同的平台安裝及設定 Firebase 本機模擬器套件 例如一次性原型工作階段 大規模的持續整合工作流程

安裝本機模擬器套件

安裝模擬器套件前,您會需要:

  • Node.js 16.0 以上版本。
  • Java JDK 11 以上版本。

如何安裝模擬器套件:

  1. 安裝 Firebase CLI。 如果您尚未安裝 Firebase CLI, 立即安裝。 您需要 CLI 8.14.0 以上版本才能使用模擬器套件。你可以 請使用以下指令檢查您安裝的版本:
    firebase --version
  2. 如果您尚未初始化目前的工作目錄,請先進行初始化 視為 Firebase 專案,請按照畫面上的提示指定 要使用的產品:
    firebase init
  3. 設定模擬器套件。這個指令會啟動設定精靈 可選取感興趣的模擬器、下載對應的模擬器 二進位檔案,並在不適當的情況下設定模擬器通訊埠。
    firebase init emulators

模擬器安裝完成後,系統不會執行更新檢查,也不會 除非您更新 Firebase CLI 版本,否則系統將會自動下載。

設定模擬器套件

您可以視需要設定模擬器的網路通訊埠和安全防護措施路徑 firebase.json 檔案中的規則定義:

  • 執行 firebase init emulators 或透過編輯的方式變更模擬器通訊埠 手動firebase.json
  • 編輯「firebase.json」以變更安全性規則定義的路徑

如未指定這些設定,模擬器將監聽 預設通訊埠以及 Cloud FirestoreRealtime DatabaseCloud Storage for Firebase 模擬器會以開放資料安全性的方式執行。

指令 說明
啟動模擬器 啟動模擬器初始化精靈。找出要安裝的模擬器,並視需要指定模擬器通訊埠設定。init emulators 不會破壞性;接受預設值會保留目前的模擬器設定。

通訊埠設定

每個模擬器都會以偏好的預設值繫結到電腦上的不同通訊埠 值。

模擬器 預設通訊埠
Authentication 9099
Emulator Suite UI 4000
Cloud Functions 5001
Eventarc 9299
Realtime Database 9000
Cloud Firestore 8080
Cloud Storage for Firebase 9199
Firebase Hosting 5000
Pub/Sub 8085

專案 ID 設定

視叫用模擬器的方式而定,您可以執行多個 使用不同 Firebase 專案 ID 或多個模擬器執行個體的模擬器 特定專案 ID 的憑證在這種情況下,模擬器執行個體會在 獨立環境

建議為所有模擬器設定一個專案 ID 因此 Emulator Suite UI、不同的產品模擬器和 特定模擬器的運作中執行個體 用途

Local Emulator Suite 偵測到多個專案 ID 時,會發出警告 但您可以藉由設定 您 firebase.json 中的 false 須有 singleProjectMode 鍵。

您可以檢查專案 ID 宣告是否在下列位置不一致:

  • 指令列中的預設專案。根據預設,專案 ID 會 會在啟動時從所選專案執行,包含 firebase initfirebase use。查看專案清單 (並查看專案已選取的項目) 使用 firebase projects:list
  • 規則單元測試。專案 ID 通常會在呼叫 Rules 時指定 單元測試程式庫方法 initializeTestEnvironmentinitializeTestApp
  • 指令列 --project 旗標。傳遞 Firebase CLI --project 標記會覆寫預設專案。您必須確保 的標記會與單元測試和應用程式初始化中的專案 ID 相符。

並檢查先前設置的平台專屬專案 ID 設定 設定 Apple 平台Android網路專案。

安全性規則設定

模擬器會從 database 接收安全性規則設定。 firebase.json 中的 firestorestorage 設定鍵。

{
  // Existing firebase configuration ...
  "database": {
    "rules": "database.rules.json"
  },
  "firestore": {
    "rules": "firestore.rules"
  },
  "storage": {
    "rules": "storage.rules"
  }

  // ...

  // Optional emulator configuration. Default
  // values are used if absent.
  "emulators": {
    "singleProjectMode": false, // do not warn on detection of multiple project IDs
    "firestore": {
      "port": "8080"
    },
    "ui": {
      "enabled": true,      // Default is `true`
      "port": 4000          // If unspecified, see CLI log for selected port
    },
    "auth": {
      "port": "9099"
    },
    "pubsub": {
      "port": "8085"
    }
  }
}

指定 Java 選項

Realtime Database 模擬器、Cloud Firestore 模擬器,以及 Cloud Storage for Firebase 模擬器以 Java 為基礎,可自訂 並透過環境變數 JAVA_TOOL_OPTIONS 偵測 JVM 旗標

例如,如果您遇到 Java 堆積空間相關錯誤, Java 堆積大小上限至 4 GB:

export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start

您可以指定多個旗標,並以半形空格分隔,例如: JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g"。這些標記只會影響以 Java 為基礎的 ,不會影響模擬器其他部分 Firebase CLI,例如 Emulator Suite UI

啟動模擬器

您可以啟動模擬器持續執行至手動終止,或針對 系統就會執行自動關閉程序。

指令 說明
emulators:start firebase.json 中設定的 Firebase 產品啟動模擬器。 模擬器程序會繼續執行,直到明確停止為止。撥號中 emulators:start 會將模擬器下載到 ~/.cache/firebase/emulators/ 而非尚未安裝
標記 說明
--only 選用。限制 用於啟動模擬器的啟動程序提供模擬器名稱的逗號分隔清單,並指定一或多個 進一步瞭解「auth」、「資料庫」、「Firestore」、「函式」、「託管」或「pubsub」。
--inspect-functions debug_port 選用。與以下項目搭配使用 Cloud Functions 模擬器,可在指定的位置啟用函式中斷點偵錯功能 通訊埠 (如果省略引數,則會使用預設通訊埠 9229)。請注意,當這個標記 Cloud Functions 模擬器會切換為 這種特殊序列化執行模式,這類函式會在單一程序中執行 順序 (FIFO)可簡化函式偵錯 與雲端中的多程序平行執行函式不同。
--export-on-exit= 選用。搭配 AuthenticationCloud FirestoreRealtime DatabaseCloud Storage for Firebase 模擬器。指示模擬器將資料匯出至 目錄,即 emulators:export 說明 指令您可使用這個標記指定匯出目錄: firebase emulators:start --export-on-exit=./saved-data。 如果使用 --import,匯出路徑會預設為相同; 例如: firebase emulators:start --import=./data-path --export-on-exit。最後 視需要將不同的目錄路徑傳遞至 --import,並 --export-on-exit 旗標。
--import=import_directory 選用。搭配 AuthenticationCloud FirestoreRealtime DatabaseCloud Storage for Firebase 模擬器。匯入使用 --export-on-exit 啟動選項或 emulators:export 附加至執行中的 AuthenticationCloud FirestoreRealtime DatabaseCloud Storage for Firebase 模擬器執行個體。模擬器記憶體中目前的所有資料 會過度配戴
emulators:exec scriptpath 啟動 Firebase 產品的模擬器後,在 scriptpath 執行指令碼 您在 firebase.json 中設定的政策。執行遷移作業時,模擬器程序會自動停止 指令碼執行完畢
標記 說明
--only 選用。限制 用於啟動模擬器的啟動程序提供模擬器名稱的逗號分隔清單,並指定一或多個 則為「firestore」、「資料庫」、「函式」、「託管」或「pubsub」。
--inspect-functions debug_port 選用。與以下項目搭配使用 Cloud Functions 模擬器,可在以下位置啟用函式的中斷點偵錯功能: 指定的通訊埠 (如果省略引數,則會使用預設通訊埠 9229)。請注意 標記提供後,Cloud Functions 模擬器會切換為特殊序列化 在單一程序中執行函式的執行模式, 順序 (FIFO)可簡化函式偵錯 與雲端中的多程序平行執行函式不同。
--export-on-exit= 選用。搭配 AuthenticationCloud FirestoreRealtime DatabaseCloud Storage for Firebase 模擬器。指示模擬器將資料匯出至 目錄,即 emulators:export 說明 指令您可使用這個標記指定匯出目錄: firebase emulators:start --export-on-exit=./saved-data。 如果使用 --import,匯出路徑會預設為相同; 例如: firebase emulators:start --import=./data-path --export-on-exit。最後 視需要將不同的目錄路徑傳遞至 --import,並 --export-on-exit 旗標。
--import=import_directory 選用。搭配 AuthenticationCloud FirestoreRealtime DatabaseCloud Storage for Firebase 模擬器。匯入使用 --export-on-exit 啟動選項或 emulators:export 附加至執行中的 AuthenticationCloud FirestoreRealtime DatabaseCloud Storage for Firebase 模擬器執行個體。模擬器記憶體中目前的所有資料 。
--ui 選用。在執行期間執行模擬器 UI。

firebase emulators:exec 方法通常比較適合 持續整合工作流程

匯出及匯入模擬器資料

您可以匯出 AuthenticationCloud FirestoreRealtime Database和 可做為可共用的通用基準資料的 Cloud Storage for Firebase 模擬器 設定。您可以使用 --import 旗標匯入這些資料集, 相同。

emulators:export export_directory

AuthenticationCloud FirestoreRealtime DatabaseCloud Storage for Firebase 模擬器。 從執行中的 Cloud FirestoreRealtime DatabaseCloud Storage for Firebase 匯出資料 模擬器執行個體。如果符合,系統就會建立指定的 export_directory 不存在。如果指定的目錄存在,系統會提示您確認 建議您覆寫先前的資料使用 --force 標記。匯出的目錄包含一個資料資訊清單檔案 firebase-export-metadata.json

您可以使用 上述的 --export-on-exit 旗標。

與持續整合系統整合

執行容器化模擬器套件映像檔

在以下環境中使用容器,安裝及設定 Emulator 套件: 持續整合設定相當簡單

請注意以下幾個問題:

  • JAR 檔案是在 ~/.cache/firebase/emulators/ 安裝及快取。

    • 建議您將這個路徑新增至 CI 快取設定, 重複下載
  • 如果存放區中沒有 firebase.json 檔案,則必須新增 emulators:startemulators:exec 指令的指令列引數 ,指定要啟動的模擬器。例如:
    --only functions,firestore

產生驗證權杖 (僅限代管模擬器)

如果持續整合工作流程採用 Firebase Hosting, 必須使用權杖登入,才能執行 firebase emulators:exec。 使用者不必登入就能使用這些模擬器

如要產生權杖,請在本機環境中執行 firebase login:ci。但不應該透過持續整合系統執行按照操作說明進行驗證。由於每個版本都有效,因此每個專案只需執行這個步驟一次。憑證應視為密碼;保密,務必保密

如果 CI 環境允許您指定 只要建立一個名為 FIREBASE_TOKEN,值為存取權杖字串。Firebase CLI 會自動採用 FIREBASE_TOKEN 環境變數 模擬器會正常啟動。

萬不得已時,只需在建構指令碼中加入權杖即可。 確認不受信任的方無法存取。如果是這個硬式編碼 可以將 --token "YOUR_TOKEN_STRING_HERE" 新增至 firebase emulators:exec 指令。

使用 Emulator Hub REST API

列出執行中的模擬器

如要列出目前執行中的模擬器,請傳送 GET 要求至 /emulators 以及 Emulator Hub 的端點

curl localhost:4400/emulators

結果會是 JSON 物件,列出所有執行中的模擬器及其內容 主機/通訊埠設定,例如:

{
  "hub":{
    "name": "hub",
    "host": "localhost",
    "port": 4400
  },
  "functions": {
    "name": "functions",
    "host": "localhost",
    "port": 5001
  }
  "firestore": {
    "name": "firestore",
    "host": "localhost",
    "port": 8080
  }
}

啟用 / 停用背景函式觸發條件

在某些情況下,您必須暫時停用本機函式, 。例如,您可能希望刪除 Cloud Firestore 模擬器,而且不會觸發任何onDelete函式 是在 Cloud FunctionsExtensions 模擬器中執行。

如要暫時停用本機函式觸發條件,請將 PUT 要求傳送至 Emulator Hub 的 /functions/disableBackgroundTriggers 端點。

curl -X PUT localhost:4400/functions/disableBackgroundTriggers

結果會是列有目前狀態的 JSON 物件。

{
  "enabled": false
}

如要在停用後啟用本機函式觸發條件,請傳送 PUT 對模擬器 /functions/enableBackgroundTriggers 端點的要求 中樞,

curl -X PUT localhost:4400/functions/enableBackgroundTriggers

結果會是列有目前狀態的 JSON 物件。

{
  "enabled": true
}

模擬器 SDK 整合

本節的表格會指出用戶端支援哪些模擬器 和 Admin SDKFuture 表示已規劃但尚未支援模擬器 廣告。

用戶端 SDK 可用性

Android Apple 平台 網頁 Firebase UI
Android
Firebase UI
iOS
Firebase UI
網頁版
Realtime Database 19.4.0 版 7.2.0 8.0.0 6.4.0 後續 不適用
Cloud Firestore 21.6.0 版 7.2.0 8.0.0 6.4.0 後續 不適用
Authentication 20.0.0 版 7.0.0 8.0.0 7.0.0 後續 4.7.2 版
Cloud Storage for Firebase 20.0.0 版 8.0.0 8.4.0 7.0.0 11.0.0 不適用
Cloud Functions 19.1.0 7.2.0 8.0.0 不適用 不適用 不適用
Hosting 不適用 不適用 不適用 不適用 不適用 不適用
Extensions 不適用 不適用 不適用 不適用 不適用 不適用

Admin SDK 可用性

節點 Java Python 前往
Realtime Database 8.6.0 版 6.10.0 2.18.0 版 後續
Cloud Firestore 8.0.0 6.10.0 3.0.0 1.0.0
Authentication 9.3.0 7.2.0 5.0.0 4.2.0 版
Cloud Storage for Firebase 9.8.0 版 後續 後續 後續
Cloud Functions 不適用 不適用 不適用 不適用
Hosting 不適用 不適用 不適用 不適用
Extensions 不適用 不適用 不適用 不適用