Честно говоря, я понятия не имею, почему это не встроено в Firebase или даже не задокументировано в Firebase. Но если вы когда-либо разрабатывали приложение Firebase с горячей перезагрузкой — каждый раз при сохранении — ваш код будет пытаться повторно инициализировать Firebase снова, что приведет к следующей ошибке:

FirebaseApp name [DEFAULT] already exists!

Теперь технически вы можете просто проигнорировать эту ошибку и двигаться вперед, но если вы хотите, вот способ предотвратить эту двойную инициализацию.

import * as firebase from 'firebase/app'
if ( !firebase.apps.length ) firebase.initializeApp( config )

По сути, он проверяет, запущено ли уже приложение Firebase, и инициализирует его только в том случае, если его нет. Это работает, если вы используете Firebase Web v8 и ниже.

Если вы используете Firebase Web v9, который настоятельно рекомендуется, так как он представляет модульный подход, позволяющий уменьшить размер и эффективность сборки, вам потребуется немного изменить код.

import { initializeApp, getApps } from 'firebase/app'
if ( !getApps().length ) initializeApp( config )

Поскольку вызова firebase по умолчанию больше нет, вам придется сначала импортировать getApps(), чтобы проверить наличие существующих приложений Firebase.

Я также понял, что новая версия Web v9 иногда требует, чтобы вы сохраняли инициализированное приложение в переменной, чтобы его можно было вызвать или поместить в другие функции Firebase. Вот как я это делал.

import { initializeApp, getApps, getApp } from 'firebase/app'
const app = !getApps().length ? initializeApp( config ) : getApp()

Если инициализированного приложения нет, я инициализирую его и сохраняю в переменной приложения. В противном случае я буду использовать getApp(), чтобы получить инициализированный экземпляр приложения и сохранить его.

Как всегда, я записываю все это как ссылку на себя в будущем, но я надеюсь, что это поможет тем, кто столкнулся с той же проблемой. Ваше здоровье!