我开始了一个基于https://github.com/zeit/next.js/tree/v3-beta/examples/with-firebase的项目
在多个组件中导入 firebase 时出现的错误。
在这个 firebase 启动文件中:
`从'firebase'导入firebase
const firebaseConfig = {
apiKey: "fdsfsdfdsf",
authDomain: "fdsfdsfsdfdsf",
数据库URL: "sdfdsfdsf",
projectId: "dsfdsfdsf",
存储桶:“dsfdsfdsf”,
messagesSenderId: "dsfdsfsdfdsf"
}
const FbApp = firebase.initializeApp(firebaseConfig)
导出默认的 FbApp.auth()`
然后在组件中:
import firebase from '../lib/firebaseClient'
使用单个组件效果很好,但如果我添加一个带有import firebase from '../lib/firebaseClient'
的新组件,应用程序将失败:
Firebase:名为“[DEFAULT]”的 Firebase 应用已经存在(app/duplicate-app)。
FirebaseError:Firebase:名为“[DEFAULT]”的 Firebase 应用程序已经存在(应用程序/重复应用程序)。
您可以检查firebase.apps
以查看它是否已加载。 如果您只加载一次,那么您只需检查长度即可。 如果您有多个,那么您可以检查每个应用程序名称。
if (!firebase.apps.length) {
firebase.initializeApp({});
}
解决方案:
`从'firebase'导入firebase
尝试 {
firebase.initializeApp({
数据库 URL: 'dfgdfg'
})
} 抓住(错误){
// 我们跳过“已经存在”消息
// 当我们热重载时不是一个实际的错误
if (!/已经存在/.test(err.message)) {
console.error('Firebase 初始化错误', err.stack)
}
}
const fb = 火力基地
导出默认 fb`
问题是由于多次调用 firebase 的 initialize 方法造成的。 我有同样的问题。 我可以通过多次限制初始化方法调用来修复它。 在一个类中进行 firebase 配置并将其设为单例类。
我是 firebase 的新手,也是最近的网络开发人员。 我有这个问题。 我的问题是由在我的 html 文件的头部和正文中链接我的 javascript 文件引起的。 我特别在 html 头中有 firebase 和 js 脚本标签,在 body 标签末尾有另一个 js 脚本标签。 我的解决方法是从头部删除所有脚本标签并将它们放在正文的底部。
这是我的解决方案:
// Config file
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());
绝妙的解决方案! @普里
@Purii你刚刚拯救了我的一天
如果您使用 firestore,请使用:
export default !firebase.apps.length
? firebase.initializeApp(config).firestore()
: firebase.app().firestore();
@jide谢谢
我还必须包括import 'firebase/firestore';
import * as firebase from 'firebase'
import 'firebase/firestore';
const config = {
apiKey: "***",
authDomain: "***",
databaseURL: "***",
projectId: "***",
storageBucket: "***",
messagingSenderId: "***"
};
export default !firebase.apps.length
? firebase.initializeApp(config).firestore()
: firebase.app().firestore();
@Purii和@jide ,感谢您的解决方案
最有用的评论
您可以检查
firebase.apps
以查看它是否已加载。 如果您只加载一次,那么您只需检查长度即可。 如果您有多个,那么您可以检查每个应用程序名称。http://stackoverflow.com/questions/37652328/how-to-check-if-a-firebase-app-is-already-initialized-on-android