开发者问题收集

避免 Firebase 重复导致无法读取属性“应用程序”

2021-05-17
522

我正在尝试在 TypeScript/NextJS 项目中使用 Firebase,但未能使其正常工作。我可以导入它并初始化应用程序:

import * as firebase from "firebase/app";
import { collection, getDocs } from "firebase/firestore";

const firebaseConfig= ({
    apiKey: "",
    authDomain: "",
    projectId: "",
    storageBucket: "",
    messagingSenderId: "",
    appId: "",
    measurementId: ""
});

firebase.initializeApp(firebaseConfig);

但是,当我重新加载页面时,出现此错误:

FirebaseError:Firebase:名为“[DEFAULT]”的 Firebase 应用程序已经存在(app / duplicated-app)。

为了缓解这个问题,我替换了

firebase.initializeApp(firebaseConfig);

if (!firebase.apps.length) {
    firebase.initializeApp(firebaseConfig);
 } else {
    firebase.app();
 }

但现在我收到错误 TypeError:无法读取未定义的属性“长度”

apps 上的 Intellisense 说 属性“apps”在类型上不存在 ,但我不知道如何处理此信息。任何帮助表示感谢。

2个回答

在版本 9 中,您应该能够改用 getApps 进行测试:

import { getApps, initializeApp } from "firebase/app"

if (!getApps().length) initializeApp(firebaseConfig)

https://firebase.google.com/docs/reference/js/v9/app.md#getapps

jnpdx
2021-05-17

您使用的语法适用于 Firebase SDK 8.x 及更早版本,因此我建议使用这些版本。版本 9 引入了一种完全不同的模块化语法 - 如 @jnpdx 的 答案 中所示。

Frank van Puffelen
2021-05-17