Firebase: приложение Firebase с именем [DEFAULT] уже существует (app / duplicate-app) - PullRequest
0 голосов
/ 11 июня 2019

Для моего Nuxt/Vue.js приложения мне нужно экспортировать различные Firestore связанные элементы, а не просто firebase.firestore().

Однако я получаю некоторую ошибку Firebase App named '[DEFAULT]' already exists (app/duplicate-app) для экспорта по умолчанию, и яне понимаю, почему:

import firebase from 'firebase/app'
import 'firebase/firestore'
const config = {
  apiKey: '...',
  authDomain: '...',
  databaseURL: '...',
  projectId: '...',
  storageBucket: '...',
  messagingSenderId: '...'
}
const firebaseApp = firebase.initializeApp(config)
firebase.firestore().settings({ experimentalForceLongPolling: false })
const db = firebase.firestore()
const fb = firebase
export { db, fb }
export default firebaseApp

Нет дубликата, который я мог бы идентифицировать в этой строке экспорта по умолчанию, так что не так?

Ответы [ 3 ]

0 голосов
/ 11 июня 2019

То, как я это делаю, - это файл firedb, который я импортирую по мере необходимости (во всем приложении или просто в Vuex).Поскольку на файл продолжают ссылаться, конфиг продолжает перезагружаться, что вызывает ту же ошибку.

То, как я справился с этим, чтобы добавить эту строку после определения конфигурации

if (!firebase.apps.length) {
  firebase.initializeApp(config);
}

У меня есть пример в condesandbox на https://codesandbox.io/s/vuex-ws-2-60fzg

С вашим кодом это будет немного сложнее, так как вы экспортируете firebaseApp const.Но это может работать для вас (не проверено)

import firebase from 'firebase/app'
import 'firebase/firestore'
const config = {
  apiKey: '...',
  authDomain: '...',
  databaseURL: '...',
  projectId: '...',
  storageBucket: '...',
  messagingSenderId: '...'
}
const firebaseApp = firebase.apps && firebase.apps.length > 0 ? firebase.apps[0] : firebase.initializeApp(config)

firebase.firestore().settings({ experimentalForceLongPolling: false })
const db = firebase.firestore()
const fb = firebase
export { db, fb }
export default firebaseApp
0 голосов
/ 01 июля 2019

Вы можете проверить firebase.apps, чтобы увидеть, загружен ли он. Если вы загружаете его только один раз, то вы можете просто проверить длину. Если у вас есть несколько, то вы можете проверить название каждого приложения.

// Файл конфигурации

import * as firebase from "firebase";

    const config = {...};

    export default !firebase.apps.length ? firebase.initializeApp(config) : firebase.app();

    // Other file
    import firebase from '../firebase';
    ...
    console.log(firebase.name);
    console.log(firebase.database());

Если вы используете пожарный магазин, используйте:

export default !firebase.apps.length
  ? firebase.initializeApp(config).firestore()
  : firebase.app().firestore();
0 голосов
/ 11 июня 2019

Вам не нужно экспортировать firebaseApp, этого должно быть достаточно

import firebase from 'firebase/app'
import 'firebase/firestore'

const config = {
  apiKey: '...',
  authDomain: '...',
  databaseURL: '...',
  projectId: '...',
  storageBucket: '...',
  messagingSenderId: '...'
}
if (!firebase.apps.length) {
    firebase.initializeApp(config)
}
firebase.firestore.settings({ experimentalForceLongPolling: false })
const db = firebase.firestore()
export { db }
export default firebase

Это не должно вызывать инстанцирование более одного раза

...