Firebase 托管在您的网站中保留以/__
开头的网址。这个保留的命名空间让其他 Firebase 产品更容易与 Firebase 托管一起使用。
当您部署到 Firebase ( firebase deploy
) 或在本地服务器上运行您的应用程序 ( firebase serve
) 时,这些保留的 URL 都可用。
为保留的 URL 添加脚本
由于 Firebase 托管在部署时通过 HTTP/2 提供服务,因此您可以通过从同一来源加载文件来提高性能。 Firebase 托管通过格式如下的特殊 URL 提供 Firebase JavaScript SDK 版本 8:
/__/firebase/JS_SDK_VERSION/FIREBASE_SDK_NAME.js
我们强烈建议仅加载您在应用中使用的库。例如,要仅包含身份验证和 Cloud Firestore,请将以下脚本添加到<body>
标记的底部,但在您使用任何 Firebase 服务之前:
<body>
<!-- Insert these scripts at the bottom of the HTML, but before you use any Firebase services -->
<!-- Firebase App (the core Firebase SDK) is always required and must be listed first -->
<script src="/__/firebase/8.10.1/firebase-app.js"></script>
<!-- Add Firebase products that you want to use -->
<script src="/__/firebase/8.10.1/firebase-auth.js"></script>
<script src="/__/firebase/8.10.1/firebase-firestore.js"></script>
</body>
SDK自动配置
自动 SDK 配置使得从单个代码库管理多个环境(例如开发、暂存和生产)变得容易。通过依赖保留的托管 URL,您可以将相同的代码部署到多个 Firebase 项目。
除了托管 SDK 本身之外,保留的命名空间还提供为与托管站点关联的 Firebase 项目初始化 SDK 所需的所有配置。此 Firebase 配置和 SDK 初始化由您可以直接包含的脚本提供:
<!-- Load the Firebase SDKs before loading this file -->
<script src="/__/firebase/init.js"></script>
当您部署到 Firebase 或在本地测试您的应用程序时,此脚本会自动为活动的 Firebase 项目配置 Firebase JavaScript SDK 并初始化 SDK。
如果您更喜欢自己控制初始化,Firebase 配置值也可以 JSON 形式提供:
fetch('/__/firebase/init.json').then(async response => {
firebase.initializeApp(await response.json());
});
可用的 Firebase JS SDK(来自保留的托管 URL)
火力地堡产品 | 库参考(保留 URL) |
---|---|
火力地堡核心 (必需的) | <script src="/__/firebase/8.10.1/firebase-app.js"></script> |
分析 | <script src="/__/firebase/8.10.1/firebase-analytics.js"></script> |
应用检查 | <script src="/__/firebase/8.10.1/firebase-app-check.js"></script> |
验证 | <script src="/__/firebase/8.10.1/firebase-auth.js"></script> |
云端 Firestore | <script src="/__/firebase/8.10.1/firebase-firestore.js"></script> |
Firebase 客户端 SDK 的云函数 | <script src="/__/firebase/8.10.1/firebase-functions.js"></script> |
Firebase 安装 | <script src="/__/firebase/8.10.1/firebase-installations.js"></script> |
云消息 | <script src="/__/firebase/8.10.1/firebase-messaging.js"></script> 为了获得使用云消息传递的最佳体验,还添加了 Firebase SDK for Analytics。 |
云储存 | <script src="/__/firebase/8.10.1/firebase-storage.js"></script> |
性能监控 (测试版) | <script src="/__/firebase/8.10.1/firebase-performance.js"></script> |
实时数据库 | <script src="/__/firebase/8.10.1/firebase-database.js"></script> |
远程配置 (测试版) | <script src="/__/firebase/8.10.1/firebase-remote-config.js"></script> 为获得使用 Remote Config 的最佳体验,还请添加 Firebase SDK for Analytics。 |
Firebase JavaScript 开发工具包 (整个SDK) | <script src="/__/firebase/8.10.1/firebase.js"></script> |
授权助手
Firebase 身份验证使用保留的命名空间提供特殊的 JavaScript 和 HTML 以通过 OAuth 完成与提供者的身份验证。这允许每个 Firebase 项目都有一个唯一的 Firebase 子域,从而提高 Firebase 身份验证的安全性。
此外,这允许您将自己的自定义域用于firebase.initializeApp()
的authDomain
选项。如果您为 Firebase 托管配置自定义域,则还可以在初始化 Firebase SDK 时指定该自定义域(而不是您的web.app
或firebaseapp.com
子域)。
保留的 URL 和服务工作者
如果您正在构建渐进式 Web 应用程序 (PWA),您可能会创建一个具有“导航回退”的服务工作者,如果它与预缓存项列表不匹配,则默认呈现特定 URL。
如果您使用的是sw-precache库,则可以添加排除保留命名空间的导航回退白名单设置:
{
navigateFallbackWhitelist: [/^(?!\/__).*/]
}
通常,请记住双下划线命名空间是为 Firebase 使用保留的,您不应该在 service worker 中拦截这些请求。