programing

이름이 '[DEFAULT]'인 Firebase 앱이 이미 있습니다(app/duplicate-app).

showcode 2023. 3. 21. 22:41
반응형

이름이 '[DEFAULT]'인 Firebase 앱이 이미 있습니다(app/duplicate-app).

안녕하세요 저는 Angular로 간단한 웹을 개발하면서 유닛 테스트를 시도하고 있습니다.JS + Firebase, 그러나 사양을 정의하고 테스트 러너를 시험하는 데 문제가 있습니다.

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

if (!firebase.apps.length) {
   firebase.initializeApp({});
}else {
   firebase.app(); // if already initialized, use that one
}

여기서도 같은 대답입니다.

파이어베이스를 사용할 때도 같은 문제가 있었습니다만, 파이어베이스를 2회 초기화하고 있는 것을 깨달았습니다.예를 들어 다음과 같습니다.

function initializeFirebase(){    
 var config = {
    apiKey: "myApiKey",
    authDomain: "myAuthDomain",
    databaseURL: "myDatabaseUrl",
    storageBucket: "myStorageBocket",
    messagingSenderId: "idhere"   
   };   
   //initialize firebase  
   firebase.initializeApp(config);  
}

내 경우 리액션을 사용하고 있었고, 초기화를 호출하고 있었다.Firebase()는 2개의 다른 컴포넌트에서 사용되지만 상위 컴포넌트에서 호출하기로 결정했습니다.데이터베이스 쿼리, 레코드 삽입, 삭제 등을 할 수 있게 되었습니다.

이게 도움이 됐으면 좋겠는데

당신의 github repo를 훑어본 결과, 당신의 질문에 제시된 것보다 더 많은 .files가 있는 것을 알 수 있었습니다.두 개의 .html 파일이 있었는데, 둘 다 같은 html 페이지에 포함되어 있어서 기본 앱을 설정 및 초기화하고 있었는데, 이 페이지에서 한 번만 수행하면 된다고 생각합니다.두 번째 "initialize App()"을 코멘트 아웃하는 것이 효과가 있었습니다.그 에러는 더 이상 발생하지 않습니다.아래를 .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);

이 에러는 파이어베이스를 프로젝트에 여러 번 초기화하려고 하기 때문에 발생합니다.

제 경우엔, 제가 직접 전화한 게 아니라initializeApp()한 번이 아니라서 주요 정답을 읽고 난 후에도 혼란스러웠어요.Firebase 호스팅을 사용하는 경우 SDK 자동 구성을 통해 초기화가 자동으로 호출됩니다. 즉, index.html에 다음 행이 있는 경우:<script src="/__/firebase/init.js"></script>전화할 필요 없어initializeApp(config).

"Firebase에 배포하거나 로컬에서 앱을 테스트하면 이 스크립트는 활성 Firebase 프로젝트에 대해 Firebase JavaScript SDK를 자동으로 구성하고 SDK를 초기화합니다." SDK 자동 구성

저는 최근에 이 문제를 제 코드로 해결했습니다.이 문제는 html 파일의 선두와 본문에 initialize App()이라고 하는 javascript 파일이 잘못 링크되어 발생한 것입니다.수정은 html 파일 선두에 있는 중복된 javascript 태그를 삭제하여 본문에 1개만 존재하게 하는 것이었습니다.

코드를 스캔하여 initialize App()을 한 번만 호출하는지 확인합니다.여기에는 메서드를 호출하거나 html 파일의 js 파일을 복제할 수 있는 js 파일이 포함됩니다.

나도 같은 문제가 있었다.

ES6 모듈을 사용하고 있으며 npm까지 Firebase를 설치한 경우 init scrips를 index.html에 넣을 수 없습니다.

방화벽 기반 종속성의 복제입니다.

프로젝트가 admin.apps에 있는지 확인합니다.초기화되지 않은 경우 를 사용합니다.이것에 의해, 에러가 발생하지 않게 됩니다.

const projectFbData = admin.apps.find((item) => item.name_ === projectId) || admin.initializeApp(config, projectId)

언급URL : https://stackoverflow.com/questions/43331011/firebase-app-named-default-already-exists-app-duplicate-app

반응형