Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

在多个网站中共享项目资源

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

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

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

第 1 步:更新 Firebase CLI 版本

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

第 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 内容和配置