將您的應用連接到 Cloud Storage 模擬器

在將您的應用連接到 Cloud Storage 模擬器之前,請確保您了解 Firebase Local Emulator Suite 的整體工作流程,並安裝和配置Local Emulator Suite 並查看其CLI 命令

選擇一個 Firebase 項目

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

要選擇要使用的項目,在啟動模擬器之前,請在 CLI 中在您的工作目錄中運行firebase use 。或者,您可以將--project標誌傳遞給每個模擬器命令。

Local Emulator Suite 支持模擬真實的Firebase 項目和演示項目。

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

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

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

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

對於您未模擬的任何產品,您的應用程序和代碼將與實時資源(數據庫實例、存儲桶、函數等)進行交互。

演示

演示 Firebase 項目沒有真正的Firebase 配置,也沒有實時資源。這些項目通常通過代碼實驗室或其他教程訪問。

演示項目的項目 ID 具有demo-前綴。

使用演示 Firebase 項目時,您的應用和代碼與模擬器交互。如果您的應用程序嘗試與未運行模擬器的資源進行交互,則該代碼將失敗。

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

  • 設置更簡單,因為您無需創建 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 功能。當 Cloud Storage 和 Cloud Functions 模擬器都在運行時,它們會自動協同工作。

管理 SDK

設置FIREBASE_STORAGE_EMULATOR_HOST環境變量後,Firebase Admin SDK 會自動連接到 Cloud Storage 模擬器:

export FIREBASE_STORAGE_EMULATOR_HOST="localhost:9199"

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

如果您希望您的 Admin SDK 代碼連接到在另一個環境中運行的共享模擬器,則需要指定您使用 Firebase CLI 設置的相同項目 ID 。您可以將項目 ID 直接傳遞給initializeApp或設置GCLOUD_PROJECT環境變量。

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

發布/訂閱通知

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

桶級元數據

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

接下來是什麼?