您可以在单个 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-blog
和 myapp-app
),则可以通过运行以下命令对每个网站应用唯一的 TARGET_NAME
(分别为 blog
和 app
):
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 \ |
通过预览网址部署默认 Hosting 网站的 Hosting 内容和配置 |
firebase hosting:channel:deploy \ |
通过预览网址部署指定 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 内容和配置 |