Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

安裝、配置和集成本地模擬器套件

Firebase 本地模擬器套件可以針對不同的原型和測試環境進行安裝和配置,從一次性原型會話到生產規模的持續集成工作流程。

安裝本地模擬器套件

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

要安裝模擬器套件:

  1. 安裝火力地堡CLI 。如果你不已經安裝了火力地堡CLI,請立即安裝。您將需要 CLI 版本 8.14.0 或更高版本才能使用 Emulator Suite。您可以檢查所安裝的版本使用下面的命令:
    firebase --version
  2. 如果你還沒有這樣做,初始化當前的工作目錄作為一個火力地堡項目,按照屏幕上的提示指定哪些產品使用:
    firebase init
  3. 設置模擬器套件。此命令啟動一個配置嚮導,讓您選擇感興趣的仿真器、下載相應的仿真器二進製文件,並在默認值不合適時設置仿真器端口。
    firebase init emulators

安裝模擬器後,不會執行更新檢查,也不會進行其他自動下載,直到您更新 Firebase CLI 版本。

配置模擬器套件

您可以選擇配置仿真器“的網絡端口和路徑的安全規則定義firebase.json文件:

  • 通過運行更改仿真器端口firebase init emulators或通過編輯firebase.json手動。
  • 通過編輯更改路徑,以安全規則定義firebase.json手動。

如果您不配置這些設置,模擬器將偵聽其默認端口,並且 Cloud Firestore、實時數據庫和 Cloud Storage 模擬器將以開放數據安全性運行。

命令描述
初始化模擬器啟動模擬器初始化嚮導。確定要安裝的模擬器並可選擇指定模擬器端口設置。 init emulators是無損;接受默認值將保留當前的模擬器配置。

端口配置

每個模擬器都使用首選默認值綁定到您機器上的不同端口。

模擬器默認端口
驗證9099
模擬器套件用戶界面4000
雲功能5001
實時數據庫9000
雲防火牆8080
雲儲存9199
Firebase 託管5000
發布/訂閱8085

安全規則配置

該仿真器會從安全規則配置databasefirestorestorage在配置鍵firebase.json

{
  // 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": {
    "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"
    }
  }
}

啟動模擬器

您可以啟動模擬器運行直到手動終止,或者運行指定測試腳本的持續時間然後自動關閉。

命令描述
模擬器:開始啟動仿真器中配置的火力地堡產品firebase.json 。模擬器進程將繼續運行,直到明確停止。調用emulators:start將模擬器下載到〜/ .cache /火力/仿真器/如果它們尚未安裝。
旗幟說明
--only可選的。限制哪些模擬器啟動。提供以逗號分隔的模擬器名稱列表,指定“auth”、“database”、“firestore”、“functions”、“hosting”或“pubsub”中的一個或多個。
--inspect-functions debug_port可選的。與 Cloud Functions 模擬器一起使用以在指定端口(如果省略參數則為默認端口 9229)啟用函數的斷點調試。請注意,當提供此標誌時,Cloud Functions 模擬器將切換到特殊的序列化執行模式,在該模式下,函數以順序 (FIFO) 順序在單個進程中執行;這簡化了函數調試,儘管行為不同於雲中函數的多進程、並行執行。
--export-on-exit=可選的。與身份驗證、Cloud Firestore、實時數據庫或 Cloud Storage 模擬器一起使用。指示模擬器(一個或多個),以將數據導出到時關閉發生時,作為用於描述目錄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可選的。與身份驗證、Cloud Firestore、實時數據庫或 Cloud Storage 模擬器一起使用。使用導入數據保存--export-on-exit啟動選項或emulators:export命令來運行驗證,雲計算公司的FireStore,實時數據庫和雲存儲的模擬器實例。當前在模擬器內存中的任何數據都將被覆蓋。
仿真器:EXEC scriptpath在運行該腳本scriptpath開始在配置的火力地堡產品模擬器後firebase.json 。當腳本完成運行時,模擬器進程將自動停止。
旗幟說明
--only可選的。限制哪些模擬器啟動。提供以逗號分隔的模擬器名稱列表,指定“firestore”、“database”、“functions”、“hosting”或“pubsub”中的一個或多個。
--inspect-functions debug_port可選的。與 Cloud Functions 模擬器一起使用以在指定端口(如果省略參數則為默認端口 9229)啟用函數的斷點調試。請注意,當提供此標誌時,Cloud Functions 模擬器將切換到特殊的序列化執行模式,在該模式下,函數以順序 (FIFO) 順序在單個進程中執行;這簡化了函數調試,儘管行為不同於雲中函數的多進程、並行執行。
--export-on-exit=可選的。與身份驗證、Cloud Firestore、實時數據庫或 Cloud Storage 模擬器一起使用。指示模擬器(一個或多個),以將數據導出到時關閉發生時,作為用於描述目錄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可選的。與身份驗證、Cloud Firestore、實時數據庫或 Cloud Storage 模擬器一起使用。使用導入數據保存--export-on-exit啟動選項或emulators:export命令來運行驗證,雲計算公司的FireStore,實時數據庫和雲存儲的模擬器實例。當前在模擬器內存中的任何數據都將被覆蓋。
--ui可選的。在執行期間運行模擬器 UI。

firebase emulators:exec方法通常更適合於連續集成工作流。

導出和導入模擬器數據

您可以從身份驗證、Cloud Firestore、實時數據庫和 Cloud Storage 模擬器導出數據,以用作可共享的通用基線數據集。這些數據集可以使用導入--import標誌如上所述,。

仿真器:出口export_directory

身份驗證,雲計算公司的FireStore,實時數據庫或雲存儲模擬器。從正在運行的 Cloud Firestore、實時數據庫或 Cloud Storage 模擬器實例導出數據。指定export_directory如果它不存在將被創建。如果指定目錄存在,系統會提示您確認是否覆蓋之前的導出數據。您可以使用--force標誌跳過此提示。導出目錄包含數據清單文件, firebase-export-metadata.json

您可以使用時,他們自動關機指示仿真器出口數據--export-on-exit上述標誌。

與您的 CI 系統集成

運行容器化模擬器套件鏡像

在典型的 CI 設置中安裝和配置帶有容器的 Emulator Suite 非常簡單。

有幾個問題需要注意:

  • JAR文件的安裝和緩存的~/.cache/firebase/emulators/

    • 您可能希望將此路徑添加到 CI 緩存配置以避免重複下載。
  • 如果你沒有一個firebase.json在你的庫文件,你必須添加一個命令行參數的emulators:startemulators:exec命令來指定哪些仿真器應啟動。例如,
    --only functions,firestore

生成身份驗證令牌(僅限託管模擬器)

如果你的持續集成的工作流依靠火力地堡主機,則需要以運行使用令牌登錄firebase emulators:exec 。其他模擬器不需要登錄。

要生成令牌,運行firebase login:ci對當地的環境;這不應該從 CI 系統執行。按照說明進行身份驗證。您應該只需要為每個項目執行一次此步驟,因為令牌將在構建中有效。令牌應被視為密碼;確保保密。

如果您的CI環境允許你指定可在構建腳本中使用的環境變量,創建一個稱為一個環境變量FIREBASE_TOKEN ,取值為標記字符串的訪問。在火力地堡CLI會自動拿起FIREBASE_TOKEN環境變量和仿真器將正常啟動。

作為最後的手段,您可以簡單地將令牌包含在您的構建腳本中,但要確保不受信任的各方無權訪問。對於這種硬編碼的方式,你可以添加--token "YOUR_TOKEN_STRING_HERE"firebase emulators:exec命令。

使用模擬器中心 REST API

列出正在運行的模擬器

要列出當前運行的模擬器,發送GET請求/emulators端點模擬器樞紐。

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
  }
}

啟用/禁用後台函數觸發器

在某些情況下,您需要暫時禁用本地函數觸發器。例如,您可能要刪除所有在雲公司的FireStore仿真器中的數據,而不會觸發任何onDelete了在雲計算功能仿真器中運行的功能。

暫時禁用本地功能觸發,發送PUT請求/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 集成

本節中的表格指示客戶端和管理 SDK 支持哪些模擬器。未來的手段模擬器支持計劃,但尚未公佈。

客戶端 SDK 可用性

安卓IOS網絡Firebase 用戶界面
安卓
Firebase 用戶界面
IOS
Firebase 用戶界面
網絡
實時數據庫19.4.0 7.2.0 8.0.0 6.4.0未來不適用
雲防火牆21.6.0 7.2.0 8.0.0 6.4.0未來不適用
驗證20.0.0 7.0.0 8.0.0 7.0.0未來未來
雲儲存20.0.0 8.0.0 8.4.0不適用不適用不適用
雲功能19.1.0 7.2.0 8.0.0不適用不適用不適用
託管不適用不適用不適用不適用不適用不適用

管理 SDK 可用性

節點爪哇Python
實時數據庫8.6.0 6.10.0 2.18.0未來
雲防火牆8.0.0 6.10.0 3.0.0 1.0.0
驗證9.3.0未來未來未來
雲儲存9.8.0未來未來未來
雲功能不適用不適用不適用不適用
託管不適用不適用不適用不適用