Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

將您的應用連接到 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 打算隨著時間的推移改進這種支持。

接下來是什麼?