跨多个站点共享项目资源

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

  • 每个网站都具有各自的托管配置
  • 每个网站都有各自特有的一系列内容。
  • 每个网站都可以拥有一个或多个关联的网域

通过在同一个 Firebase 项目中设置多个 Hosting 网站,您可以更轻松地在相关网站和应用之间共享 Firebase 资源。例如,如果您将博客、管理面板和公开应用设置为同一 Firebase 项目中的各个网站,则它们可以在共享同一个 Firebase Authentication 用户数据库的同时,拥有各自独有的网域或内容。

第 1 步:更新 Firebase CLI 版本

更新到最新版本的 Firebase CLI,以访问最新的 Firebase Hosting 功能。

第 2 步:添加其他网站

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

  • 使用 Firebase 控制台的 Hosting 页面中的工作流

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

  • 使用 Hosting REST API:projects.sites.create

对于上述每种方法,您都需要指定一个 SITE_ID,用于为网站构建 Firebase 预配的默认子网域:

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

由于这些网址使用 SITE_ID,因此网站 ID 有以下要求:

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

对于每个网站,您还可以视需要添加自定义网域,以便向多个网址提供相同的内容和配置。

删除辅助网站

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

  • 使用 Firebase 控制台的 Hosting 页面中的工作流

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

  • 使用 Hosting REST API:projects.sites.delete

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

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

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

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

firebase target:apply hosting TARGET_NAME RESOURCE_IDENTIFIER

其中的参数如下:

  • 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

部署目标的设置存储在项目目录下的 .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 通过本地托管的网址模拟默认 Hosting 网站的 Hosting 内容和配置
firebase emulators:start --only hosting:TARGET_NAME 通过本地托管的网址模拟指定 Hosting 网站的 Hosting 内容和配置
firebase hosting:channel:deploy \
CHANNEL_ID
通过预览网址部署默认 Hosting 网站的 Hosting 内容和配置
firebase hosting:channel:deploy \
CHANNEL_ID --only TARGET_NAME
通过预览网址部署指定 Hosting 网站的 Hosting 内容和配置
firebase deploy --only hosting Hosting 内容和配置部署到 firebase.json 中配置的所有 Hosting 网站的实际渠道
firebase deploy --only hosting:TARGET_NAME Hosting 内容和配置部署到指定 Hosting 网站的实际渠道
命令 说明
(不推荐,请改为使用 emulators:start
firebase serve --only hosting
通过本地托管的网址提供默认 Hosting 网站的 Hosting 内容和配置
(不推荐,请改为使用 emulators:start
firebase serve --only hosting:TARGET_NAME
通过本地托管的网址提供指定 Hosting 网站的 Hosting 内容和配置