Загрузка SDK Firebase с зарезервированных URL-адресов

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 .

Кроме того, это позволяет использовать собственный домен для параметра authDomain метода firebase.initializeApp() . Если вы настраиваете собственный домен для Firebase Hosting , вы также можете указать этот домен (вместо поддомена web.app или firebaseapp.com ) при инициализации Firebase SDK. Подробнее об использовании собственного домена см. в разделе «Рекомендации по использованию signInWithRedirect» .

Зарезервированные URL-адреса и сервис-воркеры

Если вы создаете прогрессивное веб-приложение (PWA), вы можете создать Service Worker, который имеет «запасной вариант навигации» и отображает определенный URL-адрес по умолчанию, если он не соответствует списку предварительно кэшированных элементов.

Если вы используете библиотеку sw-precache , вы можете добавить настройку белого списка резервной навигации, которая исключает зарезервированное пространство имен:

{
  navigateFallbackWhitelist: [/^(?!\/__).*/]
}

В общем случае просто помните, что пространство имен с двойным подчеркиванием зарезервировано для использования Firebase и что вы не должны перехватывать эти запросы в своем сервис-воркере.