在将 Extensions 模拟器用于您的应用之前,请确保您了解 Firebase Local Emulator Suite 的整体工作流,而且已安装和配置 Local Emulator Suite 并已查看其 CLI 命令。
本指南还假设您熟悉 Firebase Extensions 并了解如何在 Firebase 应用中使用它们。
Extensions 模拟器的用途
借助 Extensions 模拟器,您可以在安全的本地环境中安装和管理扩展程序,更好地了解其功能,同时降低结算费用。模拟器会在本地运行您的扩展程序的函数,包括使用 Cloud Firestore、Realtime Database、Cloud Storage for Firebase、Authentication 和 Pub/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 带有 |
使用演示 Firebase 项目时,您的应用和代码仅与模拟器交互。如果您的应用尝试与您没有为其运行模拟器的资源进行交互,该代码将失败。 |
我们建议您尽可能使用演示项目。演示项目具有以下优势:
- 设置更简单,您无需创建 Firebase 项目也可运行模拟器
- 安全性更强,就算您的代码意外调用了非模拟(生产环境)资源,也不可能发生数据更改、使用资源或产生费用
- 提供更好的离线支持,无需访问互联网即可下载您的 SDK 配置。
安装和评估扩展程序
使用 Extensions 模拟器可以很轻松地评估扩展程序是否满足您的需求。
下面的工作流适用于所有扩展程序,不过我们假设您对 Trigger Email (firestore-send-email
) 扩展程序感兴趣。使用本地模拟器运行时,Trigger Email 将自动使用 Cloud Firestore 和 Cloud Functions 模拟器。
如需在本地评估扩展程序,请执行以下操作:
将该扩展程序添加到本地扩展程序清单 (manifest) 中。扩展程序清单是扩展程序实例及其配置的列表。
firebase ext:install --local firebase/firestore-send-email
运行上述命令后,系统会提示您配置最新版本的
firebase/firestore-send-email
扩展程序,并将配置保存到清单中,但不会将配置部署到您的项目。如需了解详情,请参阅使用清单管理扩展程序配置按照常规方式启动 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 Firestore、Realtime Database、Cloud Storage for Firebase、Authentication 和 Pub/Sub,Firebase Local Emulator Suite 仅支持由 HTTP 请求触发的函数、由扩展程序的 Eventarc 自定义事件触发器触发的函数,以及由后台事件触发的函数。如需评估使用其他类型的触发函数的扩展程序,您需要在 Firebase 测试项目中安装相应的扩展程序。
后续步骤
- 如需查看精选视频和详细的操作方法示例,请点击 Firebase 模拟器培训播放列表。