您可以在单个 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 —
SITE_ID
项目中列出的托管站点的 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 | 在本地托管的 URL 模拟默认托管站点的托管内容和配置 |
firebase emulators:start --only hosting: TARGET_NAME | 在本地托管的 URL 模拟指定托管站点的托管内容和配置 |
firebase hosting:channel:deploy \ | 在预览 URL 部署默认托管站点的托管内容和配置 |
firebase hosting:channel:deploy \ | 在预览 URL 部署指定托管站点的托管内容和配置 |
firebase deploy --only hosting | 将托管内容和配置部署到在firebase.json 中配置的所有托管站点的直播频道 |
firebase deploy --only hosting: TARGET_NAME | 将托管内容和配置部署到指定托管站点的直播频道 |
命令 | 描述 |
---|---|
(不推荐;使用emulators:start 代替)firebase serve --only hosting | 在本地托管的 URL 上提供默认托管站点的托管内容和配置 |
(不推荐;使用emulators:start 代替)firebase serve --only hosting: TARGET_NAME | 在本地托管的 URL 上提供指定托管站点的托管内容和配置 |