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

Posted

技术标签:

【中文标题】Firebase:名为“[DEFAULT]”的 Firebase 应用程序已存在(应用程序/重复应用程序)【英文标题】:Firebase: Firebase App named '[DEFAULT]' already exists (app/duplicate-app) 【发布时间】:2019-10-26 05:10:28 【问题描述】:

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

在此导出默认行中没有我可以识别的重复项,所以出了什么问题?

【问题讨论】:

【参考方案1】:

我处理它的方式是我有一个根据需要导入的 firedb 文件(在整个应用程序中或仅在 Vuex 中)。因为文件不断被引用,配置不断重新加载,这会导致同样的错误。

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

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

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

使用您的代码会有点困难,因为您要导出 firebaseAppconst。但这可能对你有用(未经测试)

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

【讨论】:

谢谢,但现在我收到 Function Firestore.settings() requires its first argument to be of type object, but it was: a custom Object object 错误【参考方案2】:

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

【讨论】:

谢谢,不过文件的其他部分仍然有问题。对于const fb = firebase 然后export db, fb fb 无法识别,当我使用它时,我得到fb.auth... 不是函数【参考方案3】:

你不需要导出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

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

【讨论】:

奇怪,我是在node sdk上工作时才发现这个问题的,你可以检查一下是否已经有任何应用程序,我只是更新我的答案,看看firebase.apps.length跨度> 谢谢。我现在收到此错误:Function Firestore.settings() requires its first argument to be of type object, but it was: a custom Object object【参考方案4】:
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

【讨论】:

【参考方案5】:

这对我有用

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

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

【讨论】:

【参考方案6】:

在我的情况下这是我的解决方案 reactjs

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

【讨论】:

以上是关于Firebase:名为“[DEFAULT]”的 Firebase 应用程序已存在(应用程序/重复应用程序)的主要内容,如果未能解决你的问题,请参考以下文章

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

Firebase-tools 升级后 Firebase-functions 身份验证失败

没有创建 Firebase 应用 [DEFAULT] = 调用 Firebase.initializeApp()

Flutter WEB:Firebase:没有创建 Firebase 应用“[DEFAULT]”

firebase2.default.firestore 不是一个函数 - React Firebase

Firebase:使用预留托管 URL 时未创建 Firebase 应用“[DEFAULT]”