获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

将您的应用连接到 Cloud Storage for Firebase 模拟器

在将您的应用连接到 Cloud Storage for Firebase 模拟器之前,请确保您了解 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 for Firebase 模拟器交互,如下所示。

安卓
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 for Firebase 事件触发的Cloud 函数。当 Cloud Storage for Firebase 和 Cloud Functions 模拟器都在运行时,它们会自动协同工作。

管理 SDK

设置FIREBASE_STORAGE_EMULATOR_HOST环境变量后,Firebase Admin SDK 会自动连接到 Cloud Storage for Firebase 模拟器:

export FIREBASE_STORAGE_EMULATOR_HOST="localhost:9199"

请注意,Cloud Functions 模拟器会自动识别 Cloud Storage for Firebase 模拟器,因此您可以在测试 Cloud Functions 和 Cloud Storage for Firebase 模拟器之间的集成时跳过此步骤。将自动为 Cloud Storage for Firebase 中的 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"

导入和导出数据

Firebase 模拟器的数据库和 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 for Firebase 模拟器与生产环境有何不同

对于客户端应用程序的测试,Cloud Storage for Firebase 模拟器在 Firebase API 表面积方面几乎完美地与生产对齐。所有 Firebase 命令都应在常规 Firebase SDK(Web、Android 和 Apple 平台)之间运行。

对于服务器端应用程序的测试,存在限制。 Firebase Admin SDK 使用 Google Cloud API 表面,并非此 API 的所有端点都被模拟。根据经验,可以从客户端 SDK 完成的任何操作(上传或删除文件、获取和设置元数据)也可以从 Admin SDK 使用,但除此之外的任何事情都不是。下面列出了值得注意的例外情况。

与谷歌云存储的区别

Cloud Storage for Firebase 产品(包括 Storage 模拟器)提供了 Google Cloud Storage (GCS) 功能的子集,专注于存储对象,这对于开发 Firebase 应用程序非常有用。 Cloud Storage for Firebase 在以下方面与 GCS 不同:

  • Cloud Storage for Bucket目前不支持用于创建、列出、获取或删除存储分区的存储分区 API。
  • Google Cloud Storage Objects API支持以下方法: copydeletegetinsertlistpatchrewriteupdate

云 IAM

Firebase Emulator Suite 不会尝试复制或尊重任何与 IAM 相关的运行行为。模拟器遵守提供的 Firebase 安全规则,但在通常使用 IAM 的情况下,例如设置调用服务帐户的 Cloud Functions 并因此设置权限,模拟器是不可配置的,并将使用您的开发人员机器上的全局可用帐户,类似于直接运行本地脚本。

发布/订阅通知

Cloud Storage for Firebase 模拟器不与 Cloud Pub/Sub 模拟器集成,因此不支持为存储对象更改创建通道/通知。我们建议直接使用 Cloud Functions Storage 触发器。

桶级元数据

Cloud Storage for Firebase 模拟器不支持任何存储分区级别的配置,包括存储类、存储分区级别的 CORS 配置、标签或保留政策。 Firebase 打算随着时间的推移改进这种支持。

接下来是什么?

  • 如需一组精选视频和详细的操作示例,请关注Firebase 模拟器培训播放列表
  • 由于触发函数是与 Cloud Storage for Firebase 的典型集成,因此请在本地运行函数中了解有关 Cloud Functions for Firebase 模拟器的更多信息。