将您的应用程序连接到 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 打算随着时间的推移改进这种支持。

接下来是什么?