名为“[DEFAULT]”的 Firebase 应用程序已存在(应用程序/重复应用程序)[重复]
Posted
技术标签:
【中文标题】名为“[DEFAULT]”的 Firebase 应用程序已存在(应用程序/重复应用程序)[重复]【英文标题】:Firebase App named '[DEFAULT]' already exists (app/duplicate-app) [duplicate] 【发布时间】:2017-09-05 23:02:44 【问题描述】:您好,我在使用 AngularJS + Firebase 开发一个简单的 Web 时尝试进行单元测试,但在定义规范和尝试测试运行程序时遇到问题
myProject/test/spec/main.js :
describe('Controller: MainCtrl', function()
var MainCtrl, scope
beforeEach(module('MainApp'));
beforeEach(inject(function ($controller, $rootScope)
scope = $rootScope.$new();
MainCtrl = $controller('MainCtrl',
$scope: scope
)
));
it('should....',function()
expect(true).toBe(true)
)
it('should2....',function()
expect(false).toBe(false)
)
);
结果:
PhantomJS 2.1.1 (Mac OS X 0.0.0) Controller: MainCtrl should.... FAILED
Error: [$injector:modulerr] Failed to instantiate module MainApp due
to: Firebase: Firebase App named '[DEFAULT]' already exists
(app/duplicateapp).
但是,定义一次规范不是问题。例如:
it('should....',function()
expect(true).toBe(true)
)
我不知道为什么这是我给我提示的原因
这是我正在开发的项目。
https://github.com/parkwookyun/firebase-angular-board
【问题讨论】:
【参考方案1】:我在使用 firebase 时遇到了同样的问题,我意识到我正在初始化 firebase 两次,例如:
function initializeFirebase()
var config =
apiKey: "myApiKey",
authDomain: "myAuthDomain",
databaseURL: "myDatabaseUrl",
storageBucket: "myStorageBocket",
messagingSenderId: "idhere"
;
//initialize firebase
firebase.initializeApp(config);
就我而言,我使用的是 react,并且我从两个不同的组件调用 initializeFirebase(),但我决定从父组件调用它。现在我可以查询我的数据库、插入记录、删除等等。
希望这对某人有所帮助
【讨论】:
【参考方案2】:if (!firebase.apps.length)
firebase.initializeApp();
else
firebase.app(); // if already initialized, use that one
Similar answer here
【讨论】:
这是一个非常聪明的方法。谢谢。 非常感谢您的解决方案。你是最棒的 单行更好:!firebase.apps.length ? firebase.initializeApp(config) : firebase.app()
非常感谢你救了我的命hhh
在第 9 版中是这样的:let firebaseApp; if (!getApps().length) firebaseApp = initializeApp(config); else firebaseApp = getApp();
【参考方案3】:
检查项目是否在 admin.apps 中。如果是,则使用 if not 初始化它。这将防止错误发生。
const projectFbData = admin.apps.find((item) => item.name_ === projectId) || admin.initializeApp(config, projectId)
【讨论】:
纯代码答案可能会解决问题,但解释会帮助其他用户理解原因。【参考方案4】:这个错误的发生仅仅是因为你试图在你的项目中多次初始化 firebase。
【讨论】:
如果在您的应用程序中使用两个 firebase 实例而不指定名称 Firebase 将给这两个名称 DEFAULT,这会产生冲突。为确保实例保持唯一性,您可以将名称传递给函数:firebase.initializeApp(, 'your app name here')
【参考方案5】:
就我而言,我没有多次明确调用initializeApp()
,所以在阅读了主要答案后我仍然感到困惑。事实证明,如果您使用 Firebase 托管,则会通过 SDK auto-configuration 自动调用初始化,即当您在 index.html:<script src="/__/firebase/init.js"></script>
中有这一行时,您不需要调用 initializeApp(config)
。
“当您部署到 Firebase 或在本地测试您的应用时,此脚本会自动为活动的 Firebase 项目配置 Firebase javascript SDK 并初始化 SDK。” SDK auto-configuration
【讨论】:
【参考方案6】:我也遇到了同样的问题
如果你使用的是 ES6 模块并且你通过 npm 安装了 firebase,你不能将 init 脚本放入 index.html
这是firebase依赖的重复
【讨论】:
【参考方案7】:我最近在自己的代码中解决了这个问题。我的问题是由于在我的 html 文件的头部和正文中意外链接了调用 initializeApp() 的 javascript 文件引起的。我的解决方法是删除我的 html 文件头部中重复的 javascript 标记,因此正文中只存在一个。
扫描您的代码以确保您只调用一次 initializeApp()。这包括任何可能调用方法或在 html 文件中复制 js 文件的 js 文件。
【讨论】:
【参考方案8】:我只看了一眼您的 github 存储库,发现 .js 文件比您问题中建议的要多。 我有 2 个单独的 .js 文件。两者都包含在同一个 html 页面上,当我相信只需要为该页面完成一次时,它们都在配置和初始化默认应用程序。对我有用的是注释掉第二个“initializeApp()”,我不再得到那个错误。尝试在您的 .js 中查找以下内容并注释掉或删除其中一个初始化。
var config =
apiKey: "my api key",
authDomain: "something.firebaseapp.com",
databaseURL: "https://somesite.firebaseio.com",
projectId: "myProjectId",
storageBucket: "somesite.appspot.com",
messagingSenderId: "someIntegers"
;
//firebase.initializeApp(config);
【讨论】:
config 在这个例子中只是一个对象。它不会自动执行任何操作。你必须将它绑定到 firebase 包。如果定义一次,则调用它的函数/组件将呈现两次。只需按照 Isaac 所述进行检查以上是关于名为“[DEFAULT]”的 Firebase 应用程序已存在(应用程序/重复应用程序)[重复]的主要内容,如果未能解决你的问题,请参考以下文章
名为“[DEFAULT]”的 Firebase 应用程序已存在(应用程序/重复应用程序)[重复]
我应该如何配置我的应用以跨类保留 Firebase 用户数据?
Firebase-tools 升级后 Firebase-functions 身份验证失败
没有创建 Firebase 应用 [DEFAULT] = 调用 Firebase.initializeApp()