Comecei um projeto baseado em https://github.com/zeit/next.js/tree/v3-beta/examples/with-firebase
O erro que tenho ao importar o firebase em mais de um componente.
Neste arquivo de início do firebase:
`importar firebase de 'firebase'
const firebaseConfig = {
apiKey: "fdsfsdfdsf",
authDomain: "fdsfdsfsdfdsf",
databaseURL: "sdfdsfdsf",
projectId: "dsfdsfdsf",
storageBucket: "dsfdsfdsf",
messagingSenderId: "dsfdsfsdfdsf"
}
const FbApp = firebase.initializeApp (firebaseConfig)
exportar FbApp.auth () `padrão
Em seguida, nos componentes:
import firebase from '../lib/firebaseClient'
Com um único componente funciona bem, mas se eu adicionar um novo componente com import firebase from '../lib/firebaseClient'
o aplicativo falha:
Firebase: o aplicativo Firebase chamado '[DEFAULT]' já existe (app / duplicate-app).
FirebaseError: Firebase: O aplicativo Firebase chamado '[DEFAULT]' já existe (app / duplicate-app).
Você pode verificar firebase.apps
para ver se está carregado. Se você estiver carregando apenas uma vez, poderá verificar o comprimento. Se você tiver vários, poderá verificar o nome de cada aplicativo.
if (!firebase.apps.length) {
firebase.initializeApp({});
}
A solução:
`importar firebase de 'firebase'
Experimente {
firebase.initializeApp ({
databaseURL: 'dfgdfg'
})
} catch (errar) {
// pulamos a mensagem "já existe" que é
// não é um erro real quando estamos recarregando a quente
if (! / já existe / .test (err.message)) {
console.error ('Erro de inicialização do Firebase', err.stack)
}
}
const fb = firebase
exportação padrão fb`
o problema é devido à chamada do método de inicialização do firebase mais de várias vezes. eu tive esse mesmo problema. e eu poderia corrigi-lo restringindo a chamada do método de inicialização mais de uma vez. faça as configurações do Firebase em uma classe e torne-o uma classe singleton.
Eu sou novo no firebase e um desenvolvedor web recente. Eu tive esse problema. Meu problema foi causado ao vincular meu arquivo javascript no cabeçalho e no corpo do meu arquivo html. Eu tinha especificamente as tags de script firebase e js no cabeçalho html e outra tag de script js no final da tag body. Minha correção foi excluir todas as tags de script do cabeçalho e colocá-las na parte inferior do corpo.
Essa é a minha solução:
// 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());
Solução brilhante! @Purii
@Purii Você acabou de salvar meu dia
Se você usar o firestore, use:
export default !firebase.apps.length
? firebase.initializeApp(config).firestore()
: firebase.app().firestore();
@jide obrigado
Tive que incluir também 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 e @jide , obrigado pelas soluções
Comentários muito úteis
Você pode verificar
firebase.apps
para ver se está carregado. Se você estiver carregando apenas uma vez, poderá verificar o comprimento. Se você tiver vários, poderá verificar o nome de cada aplicativo.http://stackoverflow.com/questions/37652328/how-to-check-if-a-firebase-app-is-already-initialized-on-android