我启动了一个项目,在多个组件中导入firebase时发生错误。
在这个firebase启动文件中:
import firebase from 'firebase'
const firebaseConfig = {
apiKey: "fdsfsdfdsf",
authDomain: "fdsfdsfsdfdsf",
databaseURL: "sdfdsfdsf",
projectId: "dsfdsfdsf",
storageBucket: "dsfdsfdsf",
messagingSenderId: "dsfdsfsdfdsf"
}
const FbApp = firebase.initializeApp(firebaseConfig)
export default FbApp.auth()
然后在组件中:
import firebase from '../lib/firebaseClient'
使用单个组件工作得很好,但是如果我添加一个新组件:
import firebase from '../lib/firebaseClient'
应用程序失败:
错误代码:Firebase:名为“[DEFAULT]”的Firebase应用程序已存在(app/duplicate-app)。
8条答案
按热度按时间vm0i2vca1#
我也遇到了同样的问题,然后我发现了这个:
https://github.com/zeit/next.js/issues/1999
bq8i3lrv2#
解决方案:
odopli943#
我的理解是,这个错误是由于对数据库多次调用initializeApp()。扫描代码,确保只调用initializeApp()一次。对我来说,这包括检查任何可能调用该方法的js文件,并检查html文件中是否有重复的js文件。
我最近在自己的代码中解决了这个错误。我的问题是由于不小心在html文件的头部和主体中链接了调用initializeApp()的javascript文件而引起的。我的解决方法是删除html文件头部的重复javascript标签,这样在正文中就只存在一个。
snvhrwxg4#
在服务器端,类似这样的东西应该可以工作
brjng4g35#
总结所有的好答案。更好的解决方法是将环境变量从
.env.local
加载到process.env
中。接下来,我们可以像这样在客户端初始化Firebase SDK。
最后,将Firebase deps导入到其他文件中。
ylamdve66#
所以我遇到了这个问题,因为一些方面的下一个热重装。我使用了如下代码来确保我不会多次调用
initializeApp
:这不起作用,因为热重载似乎正在清除
adminClient
,所以我一直试图调用initializeApp
,即使firebase仍然记录了应用程序正在初始化。为了解决这个问题,我使用了以下代码片段:
它可以在新的服务器启动时工作,或者在开发过程中由于代码更改而导致的热重新加载时工作。
jw5wzhpr7#
如果您在Next-JS中使用Firebase管理,您可以尝试以下操作
这是typescript实现。你可以把它转换成JS
更新日期:2023年6月1日
nfeuvbwi8#
如果您使用的是新的Modular SDK v9.0.1,那么它可能不支持“firebase”命名空间。
实现,我用
参考文献: