使用 Extensions 模拟器评估扩展程序

在将 Extensions 模拟器用于您的应用之前,请确保您了解 Firebase Local Emulator Suite 的整体工作流,而且已安装和配置 Local Emulator Suite 并已查看其 CLI 命令

本指南还假设您熟悉 Firebase Extensions 并了解如何在 Firebase 应用中使用它们

Extensions 模拟器的用途

借助 Extensions 模拟器,您可以在安全的本地环境中安装和管理扩展程序,更好地了解其功能,同时降低结算费用。模拟器会在本地运行您的扩展程序的函数,包括使用 Cloud FirestoreRealtime DatabaseCloud Storage for FirebaseAuthenticationPub/Sub 模拟器且由后台事件触发的函数,以及在 Cloud Functions v2 中实现的由 Eventarc 触发的函数。

选择一个 Firebase 项目

Firebase Local Emulator Suite 模拟的是单个 Firebase 项目的产品。

如需选择要使用的项目,请在启动模拟器之前,使用 CLI 在工作目录下运行 firebase use。或者,您也可以向每个模拟器命令传递 --project 标志。

Local Emulator Suite 支持模拟实际 Firebase 项目和演示项目。

项目类型 特性 与模拟器结合使用
实际项目

实际 Firebase 项目就是您创建和配置的项目(很可能是通过 Firebase 控制台创建和配置)。

实际项目具有实时资源,例如数据库实例、存储桶、函数或您为该 Firebase 项目设置的任何其他资源。

使用实际的 Firebase 项目时,您可以为任何或所有受支持的产品运行模拟器。

对于您未模拟的任何产品,您的应用和代码都将与实时资源(数据库实例、存储桶、函数等)交互。

演示

演示 Firebase 项目没有实际 Firebase 配置,也没有实时资源。通常可通过 Codelab 或其他教程来访问这些项目。

演示项目的 ID 带有 demo- 前缀。

使用演示 Firebase 项目时,您的应用和代码仅与模拟器交互。如果您的应用尝试与您没有为其运行模拟器的资源进行交互,该代码将失败。

我们建议您尽可能使用演示项目。演示项目具有以下优势:

  • 设置更简单,您无需创建 Firebase 项目也可运行模拟器
  • 安全性更强,就算您的代码意外调用了非模拟(生产环境)资源,也不可能发生数据更改、使用资源或产生费用
  • 提供更好的离线支持,无需访问互联网即可下载您的 SDK 配置。

安装和评估扩展程序

使用 Extensions 模拟器可以很轻松地评估扩展程序是否满足您的需求。

下面的工作流适用于所有扩展程序,不过我们假设您对 Trigger Email (firestore-send-email) 扩展程序感兴趣。使用本地模拟器运行时,Trigger Email 将自动使用 Cloud FirestoreCloud Functions 模拟器。

如需在本地评估扩展程序,请执行以下操作:

  1. 将该扩展程序添加到本地扩展程序清单 (manifest) 中。扩展程序清单是扩展程序实例及其配置的列表。

    firebase ext:install --local firebase/firestore-send-email

    运行上述命令后,系统会提示您配置最新版本的 firebase/firestore-send-email 扩展程序,并将配置保存到清单中,但不会将配置部署到您的项目。如需了解详情,请参阅使用清单管理扩展程序配置

  2. 按照常规方式启动 Local Emulator Suite

    firebase emulators:start

现在,使用清单中列出的 firestore-send-email 扩展程序实例,Local Emulator Suite 会将该扩展程序的源代码下载到 ~/.cache/firebase/extensions。源代码下载完成后,系统将启动 Local Emulator Suite,然后您将能够触发扩展程序的任何后台触发函数,并将您的应用连接到 Local Emulator Suite 以测试这些函数与应用的集成。

您可以按照 Trigger Email 扩展程序的要求,使用 Emulator Suite UI 向电子邮件文档集合添加数据并设置其他后端资源。

或者,对于持续集成工作流等非交互式测试环境,您可以编写用于评估该扩展程序的测试脚本,让脚本除了执行其他步骤外,还会填充必要的 Cloud Firestore 数据并触发函数。然后,您需要调用 Local Emulator Suite 来执行该测试脚本:

firebase emulators:exec my-test.sh

使用 Extensions 模拟器进行测试与在生产环境中运行的差异

虽然 Extensions 模拟器可让您以与生产环境中的体验非常接近的方式测试扩展程序,但与生产环境中的行为还是存在一定差异。

Cloud IAM

Firebase Emulator Suite 不会尝试复制或遵从任何与 IAM 相关的运行行为。模拟器遵循提供的 Firebase 安全规则,但在通常会使用 IAM 的情况下(例如,用来设置 Cloud Functions 函数调用服务账号以及权限等),模拟器不可配置,并且将使用开发者机器上的全局可用账号(类似于直接运行本地脚本)。

触发类型限制

目前,对于 Cloud FirestoreRealtime DatabaseCloud Storage for FirebaseAuthenticationPub/SubFirebase Local Emulator Suite 仅支持由 HTTP 请求触发的函数、由扩展程序的 Eventarc 自定义事件触发器触发的函数,以及由后台事件触发的函数。如需评估使用其他类型的触发函数的扩展程序,您需要在 Firebase 测试项目中安装相应的扩展程序

后续步骤