Firebase 本地模擬器套件可以針對不同的原型和測試環境進行安裝和配置,從一次性原型設計會話到生產規模的持續集成工作流程。
安裝本地模擬器套件
在安裝模擬器套件之前,您需要:
要安裝模擬器套件:
- 安裝Firebase CLI 。如果您尚未安裝 Firebase CLI,請立即安裝。您需要 CLI 版本 8.14.0 或更高版本才能使用模擬器套件。您可以使用以下命令檢查安裝的版本:
firebase --version
- 如果您尚未這樣做,請將當前工作目錄初始化為 Firebase 項目,按照屏幕上的提示指定要使用的產品:
firebase init
- 設置模擬器套件。此命令啟動一個配置嚮導,讓您選擇感興趣的模擬器,下載相應的模擬器二進製文件,並在默認值不合適時設置模擬器端口。
firebase init emulators
安裝模擬器後,在您更新 Firebase CLI 版本之前,不會執行更新檢查,也不會進行其他自動下載。
配置模擬器套件
您可以選擇在firebase.json
文件中配置模擬器的網絡端口和安全規則定義的路徑:
- 通過運行
firebase init emulators
或手動編輯firebase.json
來更改模擬器端口。 - 通過手動編輯
firebase.json
更改安全規則定義的路徑。
如果您不配置這些設置,模擬器將偵聽其默認端口,並且 Cloud Firestore、Realtime Database 和 Cloud Storage for Firebase 模擬器將以開放數據安全性運行。
命令 | 描述 |
---|---|
初始化模擬器 | 啟動模擬器初始化嚮導。確定要安裝的模擬器並可選擇指定模擬器端口設置。 init emulators 是非破壞性的;接受默認值將保留當前的模擬器配置。 |
端口配置
每個模擬器都使用首選默認值綁定到計算機上的不同端口。
模擬器 | 默認端口 |
---|---|
驗證 | 9099 |
模擬器套件用戶界面 | 4000 |
雲功能 | 5001 |
事件弧 | 9299 |
實時數據庫 | 9000 |
雲Firestore | 8080 |
Firebase 雲存儲 | 9199 |
Firebase 託管 | 5000 |
發布/訂閱 | 8085 |
項目ID配置
根據您調用模擬器的方式,您可以使用不同的 Firebase 項目 ID 運行模擬器的多個實例,也可以針對給定項目 ID 運行多個模擬器實例。在這種情況下,模擬器實例在單獨的環境中運行。
通常,為所有模擬器調用設置一個項目 ID 是一種很好的做法,這樣模擬器套件 UI、不同的產品模擬器以及特定模擬器的所有正在運行的實例都可以在所有情況下正確通信。
Local Emulator Suite 在檢測到環境中的多個項目 ID 時會發出警告,但您可以通過在firebase.json
中將singleProjectMode
鍵設置為false
來覆蓋此行為。
您可以在以下位置檢查項目 ID 聲明是否不匹配:
- 命令行中的默認項目。默認情況下,項目 ID 將在啟動時從使用
firebase init
或firebase use
選擇的項目中獲取。要查看項目列表(並查看選擇了哪一個),請使用firebase projects:list
。 - 規則單元測試。項目 ID 通常在調用規則單元測試庫方法
initializeTestEnvironment
或initializeTestApp
時指定。 - 命令行
--project
標誌。傳遞 Firebase CLI--project
標誌會覆蓋默認項目。您需要確保標誌的值與單元測試和應用程序初始化中的項目 ID 匹配。
另請檢查您在配置Apple 平台、 Android和Web項目時設置的特定於平台的項目 ID 配置。
安全規則配置
模擬器將從firebase.json
中的database
、 firestore
和storage
配置密鑰獲取安全規則配置。
{
// 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 選項
實時數據庫模擬器、Cloud Firestore 模擬器和 Cloud Storage for Firebase 模擬器的一部分基於 Java,可以通過環境變量JAVA_TOOL_OPTIONS
使用 JVM 標誌進行自定義。
例如,如果您遇到 Java 堆空間相關錯誤,您可以將最大 Java 堆大小增加到 4GB:
export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start
可以在用空格分隔的引號中指定多個標誌,例如JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g"
。這些標誌僅影響模擬器的基於 Java 的組件,對 Firebase CLI 的其他部分(例如模擬器套件 UI)沒有影響。
啟動模擬器
您可以啟動模擬器運行直至手動終止,或者運行指定的測試腳本的持續時間,然後自動關閉。
命令 | 描述 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
模擬器:啟動 | 啟動firebase.json 中配置的 Firebase 產品的模擬器。模擬器進程將繼續運行,直到明確停止為止。調用emulators:start 會將模擬器下載到 ~/.cache/firebase/emulators/ (如果尚未安裝)。
| ||||||||||||
模擬器:exec scriptpath | 啟動firebase.json 中配置的 Firebase 產品的模擬器後,在scriptpath 處運行腳本。腳本運行完畢後,模擬器進程將自動停止。
|
firebase emulators:exec
方法通常更適合持續集成工作流程。
導出和導入模擬器數據
您可以從 Authentication、Cloud Firestore、Realtime Database 和 Cloud Storage for Firebase 模擬器導出數據,以用作可共享的通用基準數據集。如上所述,可以使用--import
標誌導入這些數據集。
模擬器:導出export_directory | 身份驗證、Cloud Firestore、實時數據庫或 Cloud Storage for Firebase 模擬器。從正在運行的 Cloud Firestore、實時數據庫或 Cloud Storage for Firebase 模擬器實例導出數據。如果指定的 您可以使用上述 |
與您的 CI 系統集成
運行容器化模擬器套件鏡像
在典型 CI 設置中使用容器安裝和配置模擬器套件非常簡單。
有幾個問題需要注意:
JAR 文件安裝並緩存在
~/.cache/firebase/emulators/
中。- 您可能希望將此路徑添加到 CI 緩存配置中以避免重複下載。
如果存儲庫中沒有
firebase.json
文件,則必須向emulators:start
或emulators:exec
命令添加命令行參數以指定應啟動哪些模擬器。例如,
--only functions,firestore
。
生成身份驗證令牌(僅限託管模擬器)
如果您的持續集成工作流程依賴於 Firebase Hosting ,那麼您將需要使用令牌登錄才能運行firebase emulators:exec
。其他模擬器不需要登錄。
要生成令牌,請在本地環境中運行firebase login:ci
;這不應該從 CI 系統執行。按照說明進行身份驗證。您應該只需要為每個項目執行一次此步驟,因為令牌在各個構建中都有效。令牌應該像密碼一樣對待;確保其保密。
如果您的 CI 環境允許您指定可在構建腳本中使用的環境變量,只需創建一個名為FIREBASE_TOKEN
的環境變量,其值為訪問令牌字符串。 Firebase 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
}
}
啟用/禁用後台功能觸發器
在某些情況下,您需要暫時禁用本地功能和擴展觸發器。例如,您可能希望刪除 Cloud Firestore 模擬器中的所有數據,而不觸發 Cloud Functions 或 Extensions 模擬器中運行的任何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 可用性
安卓 | 蘋果平台 | 網絡 | Firebase 用戶界面 安卓 | Firebase 用戶界面 iOS系統 | Firebase 用戶界面 網絡 | |
---|---|---|---|---|---|---|
實時數據庫 | 19.4.0 | 7.2.0 | 8.0.0 | 6.4.0 | 未來 | 不適用 |
雲Firestore | 21.6.0 | 7.2.0 | 8.0.0 | 6.4.0 | 未來 | 不適用 |
驗證 | 20.0.0 | 7.0.0 | 8.0.0 | 7.0.0 | 未來 | 4.7.2 |
Firebase 雲存儲 | 20.0.0 | 8.0.0 | 8.4.0 | 7.0.0 | 11.0.0 | 不適用 |
雲功能 | 19.1.0 | 7.2.0 | 8.0.0 | 不適用 | 不適用 | 不適用 |
託管 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 |
擴展 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 |
管理 SDK 可用性
節點 | 爪哇 | Python | 去 | |
---|---|---|---|---|
實時數據庫 | 8.6.0 | 6.10.0 | 2.18.0 | 未來 |
雲Firestore | 8.0.0 | 6.10.0 | 3.0.0 | 1.0.0 |
驗證 | 9.3.0 | 7.2.0 | 5.0.0 | 4.2.0 |
Firebase 雲存儲 | 9.8.0 | 未來 | 未來 | 未來 |
雲功能 | 不適用 | 不適用 | 不適用 | 不適用 |
託管 | 不適用 | 不適用 | 不適用 | 不適用 |
擴展 | 不適用 | 不適用 | 不適用 | 不適用 |