Catch up on everything we announced at this year's Firebase Summit. Learn more

將您的應用程序連接到 Cloud Storage Emulator

您的應用程序連接到雲存儲仿真器之前,請確保你理解了全部火力地堡本地模擬器套房的工作流程,以及您安裝並配置本地仿真器套件和審查其CLI命令

選擇一個 Firebase 項目

Firebase 本地模擬器套件模擬單個 Firebase 項目的產品。

要選擇項目中使用,啟動模擬器前,在命令行運行firebase use在你的工作目錄。或者,您可以通過--project標誌給每個仿真命令。

當地仿真器套件支持實時火力地堡項目和示範項目的仿真。

項目類型特徵與模擬器一起使用
真實的

一個真正的 Firebase 項目是您創建和配置的(很可能通過 Firebase 控制台)。

真實項目具有實時資源,例如數據庫實例、存儲桶、函數或您為該 Firebase 項目設置的任何其他資源。

在處理真實的 Firebase 項目時,您可以為任何或所有受支持的產品運行模擬器。

因為你不模仿任何產品,您的應用程序和代碼將用資源(數據庫實例,存儲鬥,功能等)進行交互。

演示

一個演示火力地堡項目有沒有真正的火力地堡配置和沒有活的資源。這些項目通常通過代碼實驗室或其他教程訪問。

項目編號為示範項目有demo-前綴。

當演示火力地堡的項目,你的應用程序和用仿真器代碼交互工作。如果您的應用嘗試與模擬器未運行的資源進行交互,則該代碼將失敗。

我們建議您盡可能使用演示項目。好處包括:

  • 設置更簡單,因為您無需創建 Firebase 項目即可運行模擬器
  • 更強的安全性,因為如果您的代碼不小心調用了非模擬(生產)資源,則不會發生數據更改、使用和計費
  • 更好的離線支持,因為無需訪問互聯網即可下載您的 SDK 配置。

檢測您的應用程序以與模擬器對話

Android、Apple 平台和 Web SDK

設置您的應用內配置或測試類以與 Cloud Storage 模擬器交互,如下所示。

安卓
FirebaseStorage.getInstance().useEmulator('10.0.2.2', 9199);
迅速
Storage.storage().useEmulator(withHost:"localhost", port:9199)
網頁版 v8
var storage = firebase.storage();
storage.useEmulator("localhost", 9199);
網頁版 v9
import { getStorage, connectStorageEmulator } from "firebase/storage";

const storage = getStorage();
connectStorageEmulator(storage, "localhost", 9199);

無需額外的設置是需要測試的雲功能,通過雲存儲事件觸發使用模擬器。當 Cloud Storage 和 Cloud Functions 模擬器同時運行時,它們會自動協同工作。

管理 SDK

當在火力地堡管理軟件開發工具包自動連接到雲存儲模擬器FIREBASE_STORAGE_EMULATOR_HOST環境變量設置:

export FIREBASE_STORAGE_EMULATOR_HOST="localhost:9199"

請注意,Cloud Functions 模擬器會自動識別 Cloud Storage 模擬器,因此您可以在測試 Cloud Functions 和 Cloud Storage 模擬器之間的集成時跳過此步驟。將自動為 Cloud Storage 中的 Admin SDK 設置環境變量。

從任何其他環境連接到 Cloud Storage 模擬器時,您需要指定項目 ID。你可以通過一個項目ID來initializeApp直接或設置GCLOUD_PROJECT環境變量。請注意,您不需要使用真實的 Firebase 項目 ID;雲存儲模擬器將接受任何項目的ID,只要它有一個有效的格式

Node.js 管理 SDK
admin.initializeApp({ projectId: "your-project-id" });
環境變量
export GCLOUD_PROJECT="your-project-id"

導入導出數據

數據庫和 Cloud Storage 模擬器允許您從正在運行的模擬器實例導出數據。定義一組基線數據以在您的單元測試或持續集成工作流中使用,然後將其導出以在團隊之間共享。

firebase emulators:export ./dir

在測試中,在模擬器啟動時,導入基線數據。

firebase emulators:start --import=./dir

您可以指示仿真器的出口數據在關機,要么指定導出路徑,或者乾脆利用傳遞到路徑--import標誌。

firebase emulators:start --import=./dir --export-on-exit

這些數據導入和導出選項與工作firebase emulators:exec命令為好。有關詳細信息,請參閱仿真器命令參考

Cloud Storage 模擬器與生產環境有何不同

對於客戶端應用程序的測試,Cloud Storage 模擬器在 Firebase API 表面積方面幾乎完美地與生產保持一致。所有 Firebase 命令都應在常規 Firebase SDK(Web、Android 和 Apple 平台)之間工作。

對於服務器端應用程序的測試,存在限制。 Firebase Admin SDK 使用 Google Cloud API 界面,並且並非模擬此 API 的所有端點。根據經驗,可以從客戶端 SDK 執行的任何操作(上傳或刪除文件、獲取和設置元數據)也可以從 Admin SDK 使用,但除此之外的任何事情都不是。下面列出了值得注意的例外情況。

雲端 IAM

Firebase 模擬器套件不會嘗試複製或尊重任何與 IAM 相關的運行行為。模擬器遵守提供的 Firebase 安全規則,但在通常使用 IAM 的情況下,例如設置調用服務帳戶的 Cloud Functions 並因此設置權限,模擬器不可配置,將使用開發者機器上的全局可用帳戶,類似於直接運行本地腳本。

發布/訂閱通知

Cloud Storage 模擬器不與 Cloud Pub/Sub 模擬器集成,因此不支持為存儲對象更改創建通道/通知。我們建議直接使用 Cloud Functions Storage 觸發器。

桶級元數據

Cloud Storage 模擬器不支持任何存儲分區級別的配置,包括存儲類別、存儲分區級別的 CORS 配置、標籤或保留策略。 Firebase 打算隨著時間的推移改進這種支持。

接下來是什麼?