Firebase Hosting резервирует URL-адреса на вашем сайте, начинающиеся с /__ . Это зарезервированное пространство имён упрощает использование других продуктов Firebase вместе с Firebase Hosting .
Эти зарезервированные URL-адреса доступны как при развертывании в Firebase ( firebase deploy ), так и при запуске приложения на локальном сервере ( firebase serve ).
Добавить скрипты для зарезервированных URL-адресов
Поскольку Firebase Hosting при развёртывании работает по протоколу HTTP/2, вы можете повысить производительность, загружая файлы из того же источника. Firebase Hosting обслуживает версию 8 Firebase JavaScript SDK по специальным URL-адресам, отформатированным следующим образом:
/__/firebase/JS_SDK_VERSION/FIREBASE_SDK_NAME.js
Мы настоятельно рекомендуем загружать только те библиотеки , которые вы используете в своём приложении. Например, чтобы включить только Authentication и 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-адрес Hosting , вы можете развернуть один и тот же код в нескольких проектах Firebase.
Помимо размещения самих SDK, зарезервированное пространство имён также предоставляет всю конфигурацию, необходимую для инициализации SDK для проекта Firebase, связанного с сайтом Hosting . Конфигурация Firebase и инициализация SDK обеспечиваются скриптом, который можно включить напрямую:
<!-- Load the Firebase SDKs before loading this file -->
<script src="/__/firebase/init.js"></script>
При развертывании в Firebase или локальном тестировании приложения этот скрипт автоматически настраивает Firebase JavaScript SDK для активного проекта Firebase и инициализирует SDK.
Если вы предпочитаете самостоятельно управлять инициализацией, значения конфигурации Firebase также доступны в формате JSON:
fetch('/__/firebase/init.json').then(async response => {
firebase.initializeApp(await response.json());
});
Доступные Firebase JS SDK (с зарезервированных URL-адресов Hosting )
| Продукт Firebase | Ссылка на библиотеку (зарезервированный URL) |
|---|---|
| Ядро Firebase (необходимый) | <script src="/__/firebase/8.10.1/firebase-app.js"></script> |
| Analytics | <script src="/__/firebase/8.10.1/firebase-analytics.js"></script> |
| App Check | <script src="/__/firebase/8.10.1/firebase-app-check.js"></script> |
| Authentication | <script src="/__/firebase/8.10.1/firebase-auth.js"></script> |
| Cloud Firestore | <script src="/__/firebase/8.10.1/firebase-firestore.js"></script> |
| Cloud Functions for Firebase Client SDK | <script src="/__/firebase/8.10.1/firebase-functions.js"></script> |
| Установки Firebase | <script src="/__/firebase/8.10.1/firebase-installations.js"></script> |
| Cloud Messaging | <script src="/__/firebase/8.10.1/firebase-messaging.js"></script> Для оптимальной работы с Cloud Messaging добавьте также Firebase SDK for Analytics . |
| Cloud Storage | <script src="/__/firebase/8.10.1/firebase-storage.js"></script> |
| Performance Monitoring ( бета- версия) | <script src="/__/firebase/8.10.1/firebase-performance.js"></script> |
| Realtime Database | <script src="/__/firebase/8.10.1/firebase-database.js"></script> |
| Remote Config ( бета- версия) | <script src="/__/firebase/8.10.1/firebase-remote-config.js"></script> Для оптимальной работы с Remote Config добавьте также Firebase SDK for Analytics . |
| Firebase JavaScript SDK (весь SDK) | <script src="/__/firebase/8.10.1/firebase.js"></script> |
Помощники аутентификации
Firebase Authentication использует зарезервированное пространство имён для предоставления специального JavaScript и HTML-кода для аутентификации у поставщиков через OAuth. Это позволяет каждому проекту Firebase иметь уникальный поддомен Firebase, повышая безопасность Firebase Authentication .
In addition, this allows you to use your own custom domain for the authDomain option of firebase.initializeApp() . If you configure a custom domain for Firebase Hosting , then you can also specify that custom domain (instead of your web.app or firebaseapp.com subdomain) when initializing the Firebase SDKs. See Best practices for using signInWithRedirect for more details on using a custom domain.
Зарезервированные URL-адреса и сервис-воркеры
Если вы создаете прогрессивное веб-приложение (PWA), вы можете создать Service Worker, который имеет «запасной вариант навигации» и отображает определенный URL-адрес по умолчанию, если он не соответствует списку предварительно кэшированных элементов.
Если вы используете библиотеку sw-precache , вы можете добавить настройку белого списка резервной навигации, которая исключает зарезервированное пространство имен:
{
navigateFallbackWhitelist: [/^(?!\/__).*/]
}
В общем случае просто помните, что пространство имен с двойным подчеркиванием зарезервировано для использования Firebase и что вы не должны перехватывать эти запросы в своем сервис-воркере.