На этой странице представлены советы и рекомендации по устранению неполадок JavaScript, с которыми вы можете столкнуться при использовании Firebase JavaScript SDK.
Возникли другие проблемы или вы не видите свою проблему? Обязательно ознакомьтесь с основными часто задаваемыми вопросами по Firebase, чтобы получить больше ответов по Firebase или по конкретному продукту.
Вы также можете проверить репозиторий Firebase JavaScript SDK на GitHub, чтобы ознакомиться с актуальным списком выявленных проблем и способов их устранения, а также сообщить о своих проблемах там.
Admin SDK для конструкций Node.js несовместим с Firebase JavaScript SDK
Firebase Admin SDK для Node.js и Firebase JavaScript SDK — это отдельные реализации, не использующие общие определения интерфейсов, классов и функций. Экземпляры объектов Admin SDK несовместимы с функциями Firebase JavaScript SDK.
Например, экземпляр FirebaseApp
из Admin SDK , переданный в функцию Firebase JavaScript SDK getDatabase
вызывает следующую ошибку:
TypeError: Cannot read properties of undefined (reading 'getProvider')
at _getProvider
at getDatabase
Это справедливо для всего API Firebase JavaScript SDK, а не только для Realtime Database . Это также справедливо и для использования в обратном направлении. Попытка использовать тип Timestamp
из Cloud Firestore JS SDK с Firebase Admin SDK для Node.js приводит к аналогичным ошибкам.
Избегайте использования конфликтующих версий Firebase JavaScript SDK
Несколько конфликтующих версий Firebase JavaScript SDK, настроенных как зависимости в проекте, могут привести к ошибкам выполнения при передаче экземпляров SDK между пакетами SDK. Например, использование библиотеки Data Connect с несоответствующей версией FirebaseApp
приводит к следующей ошибке:
Error: Component data-connect has not been registered yet
Эта проблема обычно возникает из-за обновления зависимостей одного, но не всех пакетов Firebase SDK. Такая ситуация часто возникает, когда автоматизированный инструмент обновления зависимостей изменяет подмножество зависимостей Firebase SDK в файле yarn.lock
или package-lock.json
проекта. Поскольку многие Firebase JavaScript SDK взаимодействуют друг с другом, использование разных версий SDK приводит к несовместимости во время выполнения.
Чтобы исправить эту проблему, удалите каталог node_modules
/ и yarn.lock
(для yarn
) или package-lock.json
(для npm
) в вашем проекте и переустановите ваши зависимости.
Если ошибки сохраняются, выполните дальнейшую отладку с помощью команды npm ls . Это позволит зарегистрировать зависимости вашего проекта, что позволит выявить конфликтующие версии модуля firebase
.
Например, следующий журнал показывает, что package-using-older-firebase
импортирует конфликтующую версию Firebase JavaScript SDK:
$ npm ls firebase --all
your-app@0.0.0
├── firebase@11.2.0
├─┬ @angular/fire@19.0.0
│ ├── firebase@11.2.0 deduped
│ └─┬ rxfire@6.1.0
│ └── firebase@10.14.1 deduped
└─┬ package-using-older-firebase@0.1.0
└─── firebase@10.14.1
Ошибки также могут возникать из-за смешивания операторов require
и import
CJS и ESM в вашем приложении. Это создаёт несколько экземпляров Firebase JavaScript SDK, каждый из которых отличается от другого, что нарушает взаимодействие Firebase JavaScript SDK. Увеличьте уровень детализации вашего сборщика для отладки в этом случае. Например, для этой цели можно использовать флаг esbuild analyze .
Убедитесь, что работники сферы услуг объединены
Сервисные работники часто создаются из отдельного конвейера от остальной части веб-приложения и не включены в конфигурацию по умолчанию упаковщиков, таких как Webpack.
Если вы используете модульную версию Firebase JavaScript SDK в своём сервис-воркере, обязательно настройте сборщик приложений на включение исходного файла сервис-воркера. В следующем примере npx
используется для упаковки сервис-воркера firebase-sw.js
в каталоге src
проекта:
npx esbuild ./src/firebase-sw.js --bundle --minify --main-fields=webworker,browser,module,main,default --outfile=public/firebase-sw.js
Активация сервис-воркера, не входящего в состав пакета, завершится ошибкой, если он импортирует модули ES, не поддерживающие сервис-воркеры, или файлы, не входящие в область действия сервис-воркера. Иногда эти сбои происходят незаметно и их сложно отладить.
Дополнительную информацию о включении модульной версии Firebase JavaScript SDK в ваше приложение см. в разделе Использование сборщиков модулей с Firebase .
В качестве альтернативы вы можете исключить необходимость объединения, импортировав compat
пакеты Firebase JavaScript SDK из CDN:
// Give the service worker access to Firebase Messaging.
// Replace 10.13.2 with the version of the Firebase JS SDK you're using
// in your app.
importScripts('https://www.gstatic.com/firebasejs/10.13.2/firebase-app-compat.js');
importScripts('https://www.gstatic.com/firebasejs/10.13.2/firebase-messaging-compat.js');
// Initialize the Firebase app in the service worker by passing in
// your app's Firebase config object.
// https://firebase.google.com/docs/web/setup#config-object
firebase.initializeApp({
...
});
// Retrieve an instance of Firebase Messaging so that it can handle
// background messages.
const messaging = firebase.messaging();
Используйте FirebaseServerApp
при работе с рендерингом на стороне сервера
Firebase JavaScript SDK изначально предназначался для работы в браузерных средах. Появление фреймворков серверного рендеринга (SSR) выводит использование SDK в новые среды выполнения. Эти среды выполнения предоставляют подмножество инструментов и API, предоставляемых веб-браузерами.
Например, некоторые Firebase SDK требуют кэширования данных с помощью IndexedDB, API, работающего только в браузере. Для аутентификации Firebase может потребоваться взаимодействие с пользователем в некоторых процессах входа, что невозможно в серверных средах без интерфейса. App Check использует эвристику браузера для проверки пользователя перед созданием токенов App Check .
При работе с SDK в этих новых средах используйте FirebaseServerApp
— новый вариант FirebaseApp
, который предоставляет средства для предварительной загрузки экземпляра SSR Firebase данными, собранными со стороны клиента.
FirebaseServerApp
поддерживает два параметра:
- Токен идентификатора аутентификации : если он указан, Firebase Auth автоматически выполняет вход в систему ранее аутентифицированного пользователя, потенциально охватывая сеанс через разделение CSR/SSR.
- Токен проверки приложений : если он указан, токен используется другими пакетами Firebase SDK без необходимости инициализации экземпляра клиента App Check (что не поддерживается вне браузерных сред). Это разблокирует поддержку SSR для продуктов с включённой App Check , таких как Cloud Functions , Data Connect , Cloud Firestore , Realtime Database и Vertex AI.
Пример использования FirebaseServerApp
в Next.js см. в разделе Оптимизация разработки приложений SSR с помощью FirebaseServerApp.