Firebase:名为“ [DEFAULT]”的Firebase应用已存在(应用/重复应用)

时间:2019-06-11 18:06:45

标签: firebase vue.js google-cloud-firestore nuxt

对于我的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

在此导出默认行中没有可识别的重复项,那怎么了?

6 个答案:

答案 0 :(得分:0)

您无需导出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

这应该避免多次调用实例化

答案 1 :(得分:0)

我处理它的方式是有一个firedb文件,可以根据需要(整个应用程序或仅在Vuex中)导入该文件。由于该文件不断被引用,因此配置会继续重新加载,从而导致相同的错误。

我在配置定义后添加此行的处理方式

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

我在https://codesandbox.io/s/vuex-ws-2-60fzg的condesandbox中有一个示例

使用您的代码会更加困难,因为您要导出 firebaseApp常量。但这可能对您有用(未经测试)

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

答案 2 :(得分:0)

您可以检查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());

如果您使用的是Firestore,请使用:

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

答案 3 :(得分:0)

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

const config = {
  apiKey: '...',
  authDomain: '...',
  databaseURL: '...',
  projectId: '...',
  storageBucket: '...',
  messagingSenderId: '...'
}
if (!firebase.apps.length) {
    firebase.initializeApp(config)
}
//by commenting this i got my result
// firebase.firestore.settings({ experimentalForceLongPolling: false })
const db = firebase.firestore()
export { db }
export default firebase

答案 4 :(得分:0)

这对我有用

const app = !firebase.apps.length ? firebase.initializeApp(info) : firebase.app();

导出const auth = app.auth() 导出默认应用;

答案 5 :(得分:0)

这是我的解决方案 reactjs

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