如何在firebase版本9(firebase v9)中初始化firebase?
如何在firebase版本9(firebase v9)中初始化firebase?
我过去使用以下方法初始化我的Firebase应用程序:\n
import firebase from "firebase/app"; import "firebase/auth"; const config = { apiKey: process.env.NEXT_PUBLIC_FIREBASE_PUBLIC_API_KEY, authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN, databaseURL: process.env.NEXT_PUBLIC_FIREBASE_DATABASE_URL, projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID, }; export default function initFirebase() { if (!firebase.apps.length) { firebase.initializeApp(config); } }
\n我正在升级我的Firebase版本到9,并且我需要一种使用ES模块初始化我的应用程序的方法。\n我尝试了以下代码:\n
import { initializeApp, getApps, getApp } from "firebase/app"; const config = { apiKey: process.env.NEXT_PUBLIC_FIREBASE_PUBLIC_API_KEY, authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN, databaseURL: process.env.NEXT_PUBLIC_FIREBASE_DATABASE_URL, projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID, }; export default function initFirebase() { getApps().length === 0 ? initializeApp(config) : getApp(); }
\n但是我遇到了以下错误:\nFirebaseError: Firebase:未创建Firebase App \'[DEFAULT]\' - 请调用Firebase App.initializeApp()(app-compat/no-app)。\n
问题的原因:在firebase版本9中,initializeApp函数的导入方式发生了变化,需要使用import { initializeApp } from "firebase/app";来导入。因此,原来的使用方式无法在新版本中正常工作。
解决方法:使用新的导入方式来初始化firebase,即import { initializeApp } from "firebase/app";。将原来的代码替换为新的导入方式,并确保所有的参数都正确设置。
如何在firebase版本9(firebase v9)中初始化firebase?
为什么不直接使用initializeApp?
import { initializeApp } from "firebase/app"; const config = { apiKey: process.env.NEXT_PUBLIC_FIREBASE_PUBLIC_API_KEY, authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN, databaseURL: process.env.NEXT_PUBLIC_FIREBASE_DATABASE_URL, projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID, }; export const app = initializeApp(config);
你真的需要自定义的initFirebase()函数吗?
我需要在某个地方导入app变量来初始化firebase吗,还是可以保持原样?
我相信你不需要在任何地方导入app。在同一个文件中,你可以初始化auth、firestore和其他firebase服务 - 这通常是你需要在某个地方导入的。
为什么将API密钥放在NEXT_PUBLIC中是安全的?这些变量不会被暴露给最终用户吗?