使用 Firebase Hosting 模拟器对 Web 应用进行原型设计和测试

在开始使用 Firebase Hosting 模拟器对 Web 应用进行原型设计和测试之前,请确保您了解 Firebase Local Emulator Suite 的整体工作流,而且已安装和配置 Local Emulator Suite 并查看其 CLI 命令

您还应该熟悉 Firebase Hosting 的功能和实现工作流。请先阅读 Firebase Hosting 简介

Firebase Hosting 模拟器有哪些用途?

Firebase Hosting 模拟器可以对 Hosting 服务进行高准确度本地模拟,能提供正式版 Hosting 的大部分功能。借助 Hosting 模拟器,您可以:

  • 在不产生存储或访问费用的情况下对静态网站和 Web 应用进行原型设计
  • 在部署到 Hosting 网站之前对 HTTPS 函数进行原型设计、测试和调试
  • 在容器化的持续集成工作流中测试网站和 Web 应用。

选择一个 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 配置。

核心原型设计工作流程

如果您要进行快速迭代,或者希望应用与模拟的后端项目资源进行交互,可以在本地测试 Hosting 内容和配置。在本地测试时,Firebase 会使用本地托管的网址提供您的 Web 应用。

  1. (可选)默认情况下,本地托管的应用会与实际(而非模拟)项目资源(函数、数据库、规则等)交互。您也可以选择关联应用,以使用您已配置的任何模拟项目资源。详细了解: Realtime Database | Cloud Firestore | Cloud Functions

  2. 从本地项目的根目录中,运行以下命令:

    firebase emulators:start
  3. 使用 CLI 返回的本地网址(通常为 http://localhost:5000)打开 Web 应用。

  4. 如需使用所做的更改更新本地网址,请刷新浏览器。

通过其他本地设备进行测试

默认情况下,模拟器仅响应来自 localhost 的请求。这意味着您可以通过计算机的网络浏览器访问托管内容,但不能通过网络中的其他设备访问托管内容。如果您想要通过其他本地设备进行测试,请按如下方式配置 firebase.json

"emulators": {
    // ...

    "hosting": {
      "port": 5000
      "host": "0.0.0.0"
    }
  }

为持续集成工作流生成身份验证令牌

如果您的持续集成工作流依赖于 Firebase Hosting,那么您需要使用令牌登录才能运行 firebase emulators:exec。其他模拟器不需要登录。

要生成令牌,请在本地环境中运行 firebase login:ci;不得通过 CI 系统执行此操作。按照说明进行身份验证。 您仅需对每个项目执行一次此步骤,因为令牌在各个 build 中都有效。令牌应被视为密码;请务必保证其机密性。

如果您的 CI 环境允许您指定可在 build 脚本中使用的环境变量,则只需创建一个名为 FIREBASE_TOKEN 的环境变量,其值为访问令牌字符串。Firebase CLI 会自动选择 FIREBASE_TOKEN 环境变量,而模拟器将正常启动。

作为最后的方法,您可以直接在 build 脚本中包含令牌,但要确保不信任方没有访问权限。对于这种硬编码方法,您可以将 --token "YOUR_TOKEN_STRING_HERE" 添加到 firebase emulators:exec 命令中。

后续步骤