名为“[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()

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

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