您可以在 App Hosting 部署之前使用 App Hosting 模拟器(Firebase Local Emulator Suite 的一部分)对应用执行本地测试。
在使用 App Hosting 模拟器之前,请确保您了解 Firebase Local Local Emulator Suite 的整体工作流,而且已安装和配置 Local Local Emulator Suite 并查看其 CLI 命令。
本主题假定您已熟悉 App Hosting。如果需要,请查看 App Hosting 简介和其他资料,以帮助您了解 App Hosting 的运作方式。
App Hosting 模拟器的用途
借助 App Hosting 模拟器,您可以在本地测试和优化 Web 应用,并能很好地模拟生产环境。这可以简化您的开发流程,并提高使用 Firebase 构建并在 App Hosting 上部署的 Web 应用的质量。
App Hosting 模拟器:
- 让您可以使用
apphosting.yaml
配置文件中定义的环境变量在本地运行 Web 应用 - 可以导出您在不同 App Hosting 环境中保存的 Secret,以便您在不同环境中模拟应用
- 可与其他 Firebase 模拟器搭配使用。如果您使用的是 Firestore、Auth 或任何其他模拟器,Local Emulator Suite 可确保这些模拟器先于 App Hosting 模拟器启动。
配置模拟器
首先,请按照安装、配置和集成 Local Emulator Suite 中的说明安装并初始化 Local Emulator Suite。除了您要设置的任何其他 Firebase 模拟器之外,请务必选择 App Hosting
Emulator
。CLI 会提示您输入一些 App Hosting 模拟器值,其中包括:
- 相对于项目的应用根目录;如果您将 monorepo 与 App Hosting 搭配使用,这是非常重要的。
- 您是否要为特定环境导出 Secret。
firebase init emulators
=== Emulators Setup
? Which Firebase emulators do you want to set up? Press Space to select emulators, then Enter to confirm your choices. (Press
<space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ App Hosting Emulator
◯ Firestore Emulator
◯ Database Emulator
◯ Hosting Emulator
◯ Pub/Sub Emulator
◯ Storage Emulator
◯ Eventarc Emulator
(Move up and down to reveal more choices)
? Specify your app's root directory relative to your project (.)
? What configs would you like to export? (Press
<space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ Secrets
? Which environment would you like to export secrets from Secret Manager for?:
◯ base (apphosting.yaml)
❯◯ staging (apphosting.yaml + apphosting.staging.yaml)
◯ preview (apphosting.yaml + apphosting.preview.yaml)
i Wrote Secrets as environment variables to apphosting.local.yaml.
i apphosting.local.yaml has been automatically added to your .gitignore.
您在此设置流程中提供的所有值都将用于更新 firebase.json
中的 App Hosting 模拟器配置。此外,您还可以通过直接更新 firebase.json
来配置 App Hosting 模拟器。App Hosting 模拟器的架构如下:
{
...
"emulators": {
"apphosting": {
"startCommandOverride": <command> [optional]
"rootDirectory": <path> [optional]
}
}
}
- 在模拟器初始化时,系统会自动生成并设置
startCommandOverride
。如果未提供,模拟器将检测并运行您的软件包管理系统的 dev 命令。 rootDirectory
用于支持 monorepo 项目设置。如果您的 Web 应用位于子目录中,则您需要提供该目录相对于根目录(firebase.json
的位置)的路径。
管理模拟
模拟器初始化会在应用的根目录中创建一个 apphosting.local.yaml
文件。此配置文件的架构与生产环境中使用的 apphosting.yaml
文件相同,但仅适用于本地开发。默认情况下,模拟器会从 apphosting.yaml
文件读取配置,但如果存在 apphosting.local.yaml
文件,则该文件中的配置会被赋予优先级。
导出 Secret 以在本地模拟不同的环境
如果您使用的是多个环境,并且想要在本地模拟不同的应用环境,则可能需要相应环境的 Secret。您可以使用 CLI 命令 apphosting:config:export
为特定环境导出 Secret(或者,如配置模拟器中所示,您可以选择在模拟器初始化期间导入 Secret)。
此命令要求您从项目的可用 App Hosting 环境中进行选择。特定于环境的 App Hosting 配置(例如“apphosting.staging.yaml”)和基础 App Hosting 配置(“apphosting.yaml”)会合并,其中特定于环境的配置优先。如果这两个配置中都存在同名的 Secret,系统会使用特定于环境的配置中的 Secret。
例如,如需从预演环境将 Secret 导出到模拟器,请执行以下操作:
firebase apphosting:config:export --project <your firebase project Id>
? What configs would you like to export? (Press
<space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ Secrets
? Which environment would you like to export secrets from Secret Manager for?:
◯ base (apphosting.yaml)
❯◯ staging (apphosting.yaml + apphosting.staging.yaml)
◯ preview (apphosting.yaml + apphosting.preview.yaml)
i Wrote Secrets as environment variables to apphosting.local.yaml.
i apphosting.local.yaml has been automatically added to your .gitignore.
系统会将您的 apphosting.local.yaml
文件更新(或创建该文件,如果它不存在的话),并将导出的 Secret 作为环境变量。由于该文件现在包含明文的敏感信息,因此系统会自动将其添加到 .gitignore
文件中,以防止其意外提交到您的源代码代码库。
运行模拟器
firebase emulators:start
这将启动 firebase.json
文件中定义的包括 App Hosting 模拟器在内的所有模拟器。