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
使用您的代码会有点困难,因为您要导出
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
【讨论】:
谢谢,但现在我收到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]”