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 или локальном тестировании этот скрипт автоматически настраивает JavaScript SDK Firebase для активного проекта Firebase и инициализирует SDK.
Если вы предпочитаете самостоятельно управлять инициализацией, значения конфигурации Firebase также доступны в формате JSON:
fetch('/__/firebase/init.json').then(async response => {
firebase.initializeApp(await response.json());
});
Доступные SDK Firebase JS (доступны по зарезервированным 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 для 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 для 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), вы можете создать сервис-воркер, который имеет «резервный вариант навигации» и по умолчанию отображает определенный URL-адрес, если он не соответствует списку предварительно кэшированных элементов.
Если вы используете библиотеку sw-precache , вы можете добавить параметр белого списка для резервного варианта навигации, исключающий зарезервированное пространство имен:
{
navigateFallbackWhitelist: [/^(?!\/__).*/]
}
В целом, просто помните, что пространство имен с двойным подчеркиванием зарезервировано для использования Firebase, и вам не следует перехватывать эти запросы в вашем сервис-воркере.