获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

跨多个站点共享项目资源

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

您可以在单个 Firebase 项目中设置一个或多个 Firebase 托管站点。由于站点都在同一个 Firebase 项目中,因此所有站点都可以访问该项目的其他 Firebase 资源。

  • 每个站点都有自己的托管配置
  • 每个站点都有自己的内容集合。
  • 每个站点可以有一个或多个关联域

通过在同一个 Firebase 项目中设置多个托管站点,您可以更轻松地在相关站点和应用之间共享 Firebase 资源。例如,如果您将博客、管理面板和公共应用程序设置为同一个 Firebase 项目中的单个站点,则它们都可以共享同一个 Firebase 身份验证用户数据库,同时还拥有自己独特的域或内容。

第 1 步:更新您的 Firebase CLI 版本

通过更新到最新版本的 Firebase CLI 来访问最新的Firebase 托管功能。

第 2 步:添加其他网站

使用以下方法之一将其他网站添加到 Firebase 项目:

  • 使用 Firebase 控制台托管页面中的工作流程

  • 使用 Firebase CLI 命令: firebase hosting:sites:create SITE_ID

  • 使用托管 REST API: projects.sites.create

对于这些方法中的每一种,您都需要指定一个SITE_ID ,它用于为站点构建 Firebase 配置的默认子域:

  • SITE_ID .web.app
  • SITE_ID .firebaseapp.com

由于SITE_ID用于这些 URL,因此站点 ID 具有以下要求:

  • 必须是有效的主机名标签,这意味着它不能包含. , _
  • 不得超过 30 个字符
  • 在 Firebase 中必须是全局唯一的

对于每个站点,您还可以选择添加自定义域以向多个 URL 提供相同的内容和配置。

删除辅助站点

使用以下方法之一从 Firebase 项目中删除不需要的网站:

  • 使用 Firebase 控制台托管页面中的工作流程

  • 使用 Firebase CLI 命令: firebase hosting:sites:delete SITE_ID

  • 使用托管 REST API: projects.sites.delete

请注意,您无法删除与您的 Firebase 项目 ID 具有相同SITE_ID的默认站点。

第 3 步:为您的站点设置部署目标

当您有多个站点并运行 Firebase CLI 部署命令时,CLI 需要一种方式来传达应将哪些设置部署到每个站点。使用部署目标,您可以在firebase.json配置文件Firebase CLI 命令中使用TARGET_NAME唯一标识特定站点,以测试或部署到您的站点。

要创建部署目标并将TARGET_NAME应用于托管站点,请从项目目录的根目录运行以下 CLI 命令:

firebase target:apply hosting TARGET_NAME RESOURCE_IDENTIFIER

其中参数是:

  • TARGET_NAME — 您要部署到的托管站点的唯一名称(您自己定义)

  • RESOURCE_IDENTIFIER您的 Firebase 项目中列出的托管站点的SITE_ID

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

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

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

第 4 步:定义每个站点的托管配置

当您在firebase.json文件中定义其托管配置时,请使用站点应用的TARGET_NAME

  • 如果您的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
        }
      ]
    }
    
  • 如果您的firebase.json文件仅定义了一个站点的配置,则不必使用数组格式:

    {
      "hosting": {
          "target": "blog",
          "public": "dist",
    
          // ...
    
          "rewrites": [...]
      }
    }
    

第 5 步:在本地测试、预览更改并部署到您的站点

从本地项目目录的根目录运行以下任何命令。

命令描述
firebase emulators:start --only hosting在本地托管的 URL 模拟默认托管站点的托管内容和配置
firebase emulators:start --only hosting: TARGET_NAME在本地托管的 URL 模拟指定托管站点的托管内容和配置
firebase hosting:channel:deploy \
CHANNEL_ID
在预览 URL 上部署默认托管站点的托管内容和配置
firebase hosting:channel:deploy \
CHANNEL_ID --only TARGET_NAME
在预览 URL 上部署指定托管站点的托管内容和配置
firebase deploy --only hosting将 Hosting 内容和配置部署到firebase.json中配置的所有Hosting 站点的直播频道
firebase deploy --only hosting: TARGET_NAME将托管内容和配置部署到指定托管站点的直播频道
命令描述
(不推荐;使用emulators:start代替)
firebase serve --only hosting
在本地托管的 URL 上提供默认托管站点的托管内容和配置
(不推荐;使用emulators:start代替)
firebase serve --only hosting: TARGET_NAME
在本地托管的 URL 上提供指定托管站点的托管内容和配置