Firebase CLI 是一种工具,可让您通过命令行管理和配置 Firebase 产品和服务。
该 CLI 提供可用于执行各种 Data Connect 任务的命令,例如创建新的 Data Connect 项目、初始化相应的本地工作目录、设置 Data Connect 模拟器、列出 Data Connect 资源、生成客户端 SDK 等。
设置命令
将 Data Connect 添加到 Firebase 项目
firebase init
使用 firebase init
设置新的本地项目配置。此工作流会在您的目录中创建或更新 Firebase 配置文件。
firebase init
firebase init
流程会引导您完成服务和数据库的设置,并可选择安装 Data Connect 模拟器和配置生成的 SDK。
服务和数据库设置
如果您选择 dataconnect
进行产品设置,CLI 会提示您输入新的服务名称和位置,以及是否关联现有的 Cloud SQL for PostgreSQL 实例或创建新实例。
如果关联的是现有实例,CLI 会检查是否存在兼容的设置,例如 IAM 身份验证和公共 IP 地址。
Local Emulator Suite 设置
CLI 流程会提供设置模拟器(包括 Data Connect 模拟器)的选项。
Data Connect 模拟器命令
启动 Data Connect 模拟器
emulators:start/exec
firebase emulators:start/exec
在交互模式下使用 Local Emulator Suite 版本的 Data Connect 模拟器(使用 start
),或在脚本驱动的非交互模式下使用该模拟器(使用 exec
)。
导出和导入本地 PostgreSQL 数据
为了支持本地原型设计和测试以及持续集成,您可以导出存储在本地数据库实例中的数据,并在开发迭代和测试运行之间导入这些数据。
导出内容会以本地 PostgreSQL 数据库的快照形式存储。
Data Connect 提供三种导出/导入方法:
- 在
firebase.json
中配置了自动导出/导入,以便在模拟器关闭和启动时提供快照备份 - 使用 CLI 手动导出/导入
- 使用 VS Code 扩展程序界面手动导出/导入
在 firebase.json
中配置的自动导出和导入
如需在开发会话之间备份数据,请在 firebase init
序列期间指定自动备份位置。此位置信息存储在 firebase.json
的 emulators.dataconnect.dataDir
字段中。您所做的任何数据更改都会在模拟器运行期间自动保存到此处,因此在本地测试和探索期间非常有用。
手动导出:emulators:export
和 emulators:start/exec --import
在 Data Connect 模拟器运行时,在单独的终端中运行 firebase emulators:export
命令以保存数据快照。然后,您可以使用 --import
标志从该快照启动模拟器。
# Export data from local emulator from a separate terminal
firebase emulators:export --only dataconnect <export_directory>
# Import data from local directory, here using emulators:exec
firebase emulators:exec ./<your-test-script>.sh --only dataconnect --import <import_directory>
手动导出/导入:VS Code 扩展程序
在 VS Code 扩展程序界面中,当模拟器运行时,使用导出模拟器数据按钮导出当前数据库内容。默认导出位置是项目目录根目录中的 exportedData
目录。
您可以使用 CLI 导入这些数据,如上一部分中所述。 您还可以在通过 VS Code 启动模拟器之前导入此数据,方法是点击配置模拟器链接并设置导入路径。
架构和连接器管理命令
本部分包含用于管理架构和连接器的命令的 CLI 参考信息。
如需了解与这些命令相关的用例和推荐做法,请参阅架构和连接器管理指南。
部署架构和连接器
deploy
firebase deploy
此命令会部署 firebase.json 中编入索引的 Data Connect 服务的资源。系统会根据需要执行架构迁移和连接器更新。
命令 | 说明 | |
---|---|---|
firebase deploy |
标志 | 说明 |
--仅限数据连接 |
为此项目的所有 Data Connect 服务部署架构和连接器,但不部署其他 Firebase 产品资源。 | |
--only dataconnect:serviceId |
为指定的 Data Connect 服务部署架构和连接器。 | |
--仅限 dataconnect:serviceId:connectorId |
为指定 Data Connect 服务部署单个连接器。 | |
--only dataconnect:serviceId:schema |
部署指定 Data Connect 服务的架构。 |
借助 –-only
标志,您可以传递以英文逗号分隔的值,以部署所需的任何资源子集。
firebase deploy --only dataconnect:service1:schema,dataconnect:service2
列出 Data Connect 服务、架构和连接器
dataconnect:services:list
firebase dataconnect:services:list
此命令会输出有关项目中部署的服务、架构和连接器的基本信息。
比较和迁移 SQL 架构
运行 firebase deploy
时,CLI 会在部署更新之前执行 SQL 架构比较。您还可以使用一组 dataconnect:sql
命令直接执行比较和更新。
dataconnect:sql:diff
firebase dataconnect:sql:diff
此命令会将服务的本地架构与相应 Cloud SQL 数据库的当前架构进行比较。它会输出将数据库迁移到新架构时要运行的命令。
命令 | 说明 | |
---|---|---|
firebase dataconnect:sql:diff |
标志/参数 | 说明 |
serviceId |
指定服务。如果省略,则打印 firebase.json 中所有服务的差异。 |
dataconnect:sql:migrate
firebase dataconnect:sql:migrate
此命令将本地架构更改应用到服务的 Cloud SQL 数据库。
当您设置新的本地 Data Connect 项目时,如果使用默认的 dataconnect.yaml
文件,dataconnect:sql:migrate
命令的行为是先提示您进行任何必需的更改,然后再提示您进行任何可选的更改,最后执行更改。您可以更新 dataconnect.yaml
配置,以修改此行为,从而始终包含或忽略可选更改,如以严格模式或兼容模式迁移架构中所述
在交互式环境中,CLI 会显示每条迁移 SQL 语句(以及是否具有破坏性),并提示您要应用哪些更改。传递 --force
标志相当于接受所有提示。
在非互动环境中:
- 如果没有
--force
,则只会进行非破坏性更改。如果存在破坏性更改,CLI 会中止操作,而不进行任何更改。 - 使用
--force
,所有更改均已完成。如果其中包含任何破坏性更改,系统会打印这些更改,并询问您是否要继续,除非提供了--force
标志。
命令 | 说明 | |
---|---|---|
firebase dataconnect:sql:migrate |
标志 | 说明 |
serviceId |
迁移指定服务的数据库。如果您的项目只有一个服务,系统会推断出 serviceId。 | |
--force |
自动接受提示。 |
与其他 --only
标志一样,您可以提供多个以英文逗号分隔的服务。
以严格模式或兼容模式迁移架构
Data Connect 架构迁移具有两种不同的架构验证模式:严格和兼容。严格模式验证要求数据库架构与应用架构完全匹配,然后才能部署应用架构。兼容模式验证要求数据库架构与应用架构兼容,这意味着数据库中未被应用架构使用的元素保持不变。
架构和连接器管理指南中介绍了这些架构验证模式以及架构迁移的最佳实践
验证模式使用 dataconnect.yaml
文件中的 schemaValidation
键进行定义。如果未指定 schemaValidation
,CLI 会应用兼容的更改,并在执行任何严格的更改之前提示您。请参阅配置参考。
管理连接器变更
当您运行 firebase deploy
时,CLI 会启动适用连接器的更新。CLI 会分析每个连接器的更改,并针对可能导致客户端代码的先前版本出现意外行为(消息为警告级别)或中断(消息为中断级别)的连接器更改发布一组评估消息。
影响评估 | 场景 |
---|---|
警告级别(与有线设备兼容,可能会改变行为) |
|
破坏性级别(线路不兼容,可能会破坏客户端) |
|
破坏性级别(线路不兼容,会破坏客户端) |
|
在交互式环境中,CLI 会显示每个连接器评估,并提示您要应用哪些更改。传递 --force
标志相当于接受所有评估。
在非交互式环境中:
- 如果仅出现警告级评估(可能发生行为变化),则所有连接器都将部署,并且警告将记录到终端。
- 如果出现任何严重程度为“中断”的评估结果,系统将不会部署任何连接器,并且会将警告记录到终端。您可以使用
--force
标志替换此设置。
审核授权代码
当您使用 Firebase CLI 中的 firebase deploy
部署到服务器时,Data Connect 会通过分析连接器代码来帮助您审核授权策略。您可以使用此审核来帮助您检查代码库。
部署连接器时,CLI 会输出连接器中现有、已修改和新操作代码的评估结果。
对于修改后的操作和新操作,当您在新操作中使用某些访问权限级别,或者修改现有操作以使用这些访问权限级别时,CLI 会发出警告并提示您进行确认。
系统始终会在以下情况下显示警告和提示:
PUBLIC
如果您不使用 auth.uid
通过过滤条件来扩充以下访问权限级别,系统会显示警告和提示:
USER
USER_ANON
USER_EMAIL_VERIFIED
如需详细了解授权,请参阅授权和证明指南。
SDK 命令
生成 SDK
dataconnect:sdk:generate
firebase dataconnect:sdk:generate
此命令会生成 connector.yaml 中声明的类型化 SDK。
另请参阅有关使用 Web SDK、Android SDK 和 iOS SDK 的指南。
命令 | 说明 | |
---|---|---|
firebase dataconnect:sdk:generate |
标志 | 说明 |
--watch |
保持进程运行,并在您保存对架构和连接器 GQL 文件所做的更改时生成新的 SDK。 如果生成失败,系统会将错误输出到 stdout,生成的代码不会更改,并且命令将继续运行。 |
|
--仅限 connectorId:platform |
仅为单个平台和单个连接器生成 SDK。 |
借助 –only
标志,您可以传递以英文逗号分隔的值。
firebase dataconnect:sdk:generate –-only connector1, connector1:kotlin
Cloud SQL 管理命令
为 Cloud SQL 授予 SQL 角色
Data Connect 在您自己的 PostgreSQL 实例(托管在 Cloud SQL 上)之上运行。SQL 角色命令可帮助您管理数据库表中的权限。
dataconnect:sql:setup
firebase dataconnect:sql:setup
此命令用于配置数据库中表的初始全局权限。
默认数据库配置和管理流程假定您的项目使用新的(从头开始创建的)数据库,并且当您调用 firebase deploy
时,Data Connect 将显示要进行的数据库架构更改,并在您批准后执行任何迁移。如果您偏好此流程,dataconnect:sql:setup
会提示您授予权限,包括 superuser
架构所有权。
对于现有(棕地)数据库,您可能拥有自己的架构迁移工作流程,并希望自行维护架构所有权。如果您偏好此流程,请务必在系统提示是否让 Data Connect 为您处理 SQL 迁移时选择拒绝。dataconnect:sql:setup
拒绝后,Data Connect 将仅对您的数据库表拥有 read
和 write
访问权限,但架构所有权和迁移仍由您负责。
如需了解更多讨论内容和使用情形,请参阅管理服务和数据库。
dataconnect:sql:grant
firebase dataconnect:sql:grant
在某些情况下,您可能需要直接访问数据库,以查询或更新 Data Connect 应用生成的数据。为此,您需要将本部分中定义的某个角色授予所需的用户或服务账号。
如需详细了解授予的角色,请参阅 PostgreSQL 用户角色。
角色 | SQL 角色 | 权限 | 用法 | 可授予 |
---|---|---|---|---|
读取者 | firebasereader_<db_name>_<schema_name> |
对数据库的只读权限。 可以对指定架构中的所有表执行 SELECT 操作。 |
非常适合需要检索数据但不需要修改数据的用户或服务。 | 是 |
作家 | firebasewriter_<db_name>_<schema_name> |
对数据库的读写权限。 可以对架构中的所有表执行 SELECT 、INSERT 、UPDATE 、DELETE 和 TRUNCATE 操作。 |
适合需要修改数据库内数据的用户或服务。 | 是 |
所有者 | firebaseowner_<db_name>_<schema_name> |
架构所有者。 对架构中的所有表和序列拥有所有权限。 |
此角色与 IAM roles/cloudsql.client 角色结合使用,可授予对数据库执行迁移的权限。例如,在调用 firebase dataconnect:sql:migrate 时。 |
是 |
超级用户 | cloudsqlsuperuser |
内置的超级用户角色,对数据库拥有完整权限。 除了所有者权限外,它还可以创建架构、删除架构、安装扩展程序以及执行任何其他管理任务。 在 CLI 中通过以“firebasesuperuser”身份登录来访问。 |
安装扩展程序、创建初始架构以及向其他用户授予任何可授予的 SQL 角色时需要此权限。 如果非管理员用户需要超级用户权限,迁移将会失败,并提示用户让数据库管理员(即具有 roles/cloudsql.admin 的用户)运行具有权限的 SQL 命令。 |
授予具有 roles/cloudsql.admin 的用户,无法直接通过 Firebase CLI 授予 |
命令 | 说明 | |
---|---|---|
firebase dataconnect:sql:grant |
标志/参数 | 说明 |
-R, --role 角色 |
要授予的 SQL 角色,可以是以下角色之一:所有者、写入者或读取者。 | |
-E, --email email_address |
要授予角色的用户或服务账号的电子邮件地址。 |
全局选项
以下全局选项适用于所有命令:
--json
将 CLI 输出切换为 JSON,以便供其他工具解析。--noninteractive
和--interactive
会根据需要替换对非 TTY 环境的自动检测。