部署目标

部署目标是 Firebase 项目中的 Firebase 资源的短名称标识符(由您自己定义),例如具有独特静态资源的 Hosting 网站或具有相同安全规则的一组 Realtime Database 实例。

当您拥有多个 Hosting 网站、多个 Cloud Storage 存储分区或多个 Realtime Database 实例时,部署目标会非常有用。借助部署目标,Firebase CLI 可以将设置部署到项目中的特定 Firebase 资源或资源组,例如:

  • 每个托管网站的托管配置
  • 每个托管网站的项目目录中的静态资源
  • 多个实时数据库实例或多个 Cloud Storage 存储分区共享的安全规则

如需设置部署目标,请执行以下操作:

  1. TARGET_NAME 应用于目标 Firebase 资源或 Firebase 资源组。
  2. firebase.json 文件中,在配置每项资源或资源组的设置时引用关联的 TARGET_NAME

运行 Firebase CLI 命令(如 firebase deploy)时,Firebase CLI 会将每个 TARGET_NAME 与其关联的 Firebase 资源配对。然后,CLI 会向您的 Firebase 项目传达每项资源的设置。

为 Firebase 资源设置部署目标

使用 Firebase CLI,将 TARGET_NAME(您自己定义的短名称标识符)应用于 Firebase 资源或 Firebase 资源组。Firebase 支持为以下各项资源部署目标:

部署目标的设置存储在项目目录下的 .firebaserc 文件中,以便您一次只需为一个项目设置部署目标。

为 Hosting 设置部署目标

如需创建部署目标并将 TARGET_NAME 应用于 Hosting 网站,请运行以下 CLI 命令:

firebase target:apply TYPE TARGET_NAME RESOURCE_IDENTIFIER

其中的参数是:

  • TYPE - 相关 Firebase 资源类型

    • 对于 Firebase Hosting 网站,请使用 hosting
  • TARGET_NAME - 要部署到的目标 Hosting 网站的唯一名称

  • RESOURCE_IDENTIFIER - 您的 Firebase 项目中列出的 Hosting 网站的 SITE_ID

例如,如果您在 Firebase 项目中创建了两个网站myapp-blogmyapp-app),则可以通过运行以下命令对每个网站应用唯一的 TARGET_NAME(分别为 blogapp)。

firebase target:apply hosting blog myapp-blog
firebase target:apply hosting app myapp-app

为 Cloud Storage 或 Realtime Database 设置部署目标

如需创建部署目标并将 TARGET_NAME 应用于一组 Cloud Storage 或 Realtime Database 资源,请运行以下 CLI 命令:

firebase target:apply TYPE TARGET_NAME RESOURCE-1_IDENTIFIER RESOURCE-2_IDENTIFIER ...

其中的参数是:

  • TYPE - 相关 Firebase 资源类型

    • 对于 Cloud Storage 存储分区,请使用 storage
    • 对于 Realtime Database 实例,请使用 database
  • TARGET_NAME - 共享安全规则的资源或资源组的唯一名称

  • RESOURCE_IDENTIFIER - 您的 Firebase 项目中列出的均共享相同安全规则的资源的标识符(例如,存储分区名称或数据库实例 ID)

例如,您可以通过运行以下命令,将 mainTARGET_NAME 应用于包含三个区域级 Cloud Storage 存储分区(均共享相同安全规则)的一组资源:

firebase target:apply storage main myproject.appspot.com myproject-eu myproject-ja

请注意,myproject.appspot.com 是默认存储分区的标识符,myproject-eumyproject-ja 是在 Firebase 项目中创建的其他两个存储分区。

配置 firebase.json 文件以使用部署目标

为 Firebase 资源设置部署目标后,请引用在 firebase.json 配置文件中应用的每个 TARGET_NAME

  1. 为每项 Firebase 资源 TYPEhostingstoragedatabase)创建一组配置对象。
  2. 在这些组中,指定 target(使用 TARGET_NAME)并定义关联的 Firebase 资源或资源组的设置。

我们接着上面的示例操作,由于您的 Firebase 项目有两个 Hosting 网站和三个 Cloud Storage 存储分区(共享相同的安全规则),因此您的 firebase.json 文件会如下所示:

{
  "hosting": [ {
      "target": "blog",  // "blog" is the applied TARGET_NAME for the Hosting site "myapp-blog"
      "public": "blog/dist",  // contents of this folder are deployed to the site "myapp-blog"

      // ...
    },
    {
      "target": "app",  // "app" is the applied TARGET_NAME for the Hosting site "myapp-app"
      "public": "app/dist",  // contents of this folder are deployed to the site "myapp-app"

      // ...

      "rewrites": [...]  // You can define specific Hosting configurations for each site
    }
  ]
}

{
  "storage": [ {
      "target": "main",  // "main" is the applied TARGET_NAME for the group of Cloud Storage buckets
      "rules": "storage.main.rules"  // the file that contains the shared security rules
    }
  ]
}

如果您的资源有多个配置,则您可以创建多个部署目标,并在 firebase.json 文件中分别指定每个目标。当您运行 firebase deploy 时,所有关联的资源均会一同部署。

管理部署目标

部署目标的设置存储在项目目录下的 .firebaserc 文件中。您可以通过从项目目录的根目录下运行以下任一命令来管理项目的部署目标。

命令 说明
firebase target 列出当前项目目录的部署目标
firebase target:remove \
TYPE RESOURCE_IDENTIFIER
将资源从分配到的目标中移除
firebase target:clear \
TYPE TARGET_NAME
从指定目标中移除所有资源或 Hosting 网站

target:removetarget:clear 命令会自动更新项目目录下 .firebaserc 文件中的部署目标设置。

部署之前在本地进行测试

从项目目录的根目录下运行以下任一命令。

命令 说明
firebase emulators:start 模拟项目目录中所有已配置的资源
firebase emulators:start \
--only hosting:TARGET_NAME
仅模拟指定托管网站的托管内容和配置
firebase emulators:start \
--only storage:TARGET_NAME
仅模拟指定 Cloud Storage 目标的规则文件
firebase emulators:start \
--only database:TARGET_NAME
仅模拟指定 Realtime Database 目标的规则文件

详细了解如何配置和使用 Firebase Local Emulator Suite

部署特定的 Firebase 资源

从项目目录的根目录下运行以下任一命令。

命令 说明
firebase deploy 为项目目录中所有可部署的资源创建版本
firebase deploy \
--only hosting:TARGET_NAME
仅将指定 Hosting 网站的 Hosting 内容和配置部署到网站的已发布渠道
firebase hosting:channel:deploy CHANNEL_ID \
--only TARGET_NAME
仅将指定 Hosting 网站的 Hosting 内容和配置部署到网站的预览渠道
firebase deploy \
--only storage:TARGET_NAME
仅部署指定 Cloud Storage 目标的规则文件
firebase deploy \
--only database:TARGET_NAME
仅部署指定 Realtime Database 目标的规则文件