Firebase v9版本如何适配原firebase.apps.length初始化判断逻辑
Firebase v9 初始化适配方案
Firebase v9 采用了全新的模块化 tree-shakable 设计,移除了原有的全局 firebase 命名空间,原有初始化逻辑可按两种场景调整:
场景1:使用兼容包快速过渡(最小改动)
如果你暂时不想重构现有代码,可使用v9附带的compat版本兼容层,原有判断逻辑几乎不用调整,仅需修改导入语句:
// 导入compat版本的firebase核心 import firebase from 'firebase/compat/app' // 其他服务也导入compat版本即可,比如auth:import 'firebase/compat/auth' // 原有逻辑完全复用 if (firebase.apps.length < 1) { firebase.initializeApp(firebaseConfig); // 其他firebase产品初始化逻辑保留 }
注意:compat包会保留v8的所有API,但体积会比纯模块化写法大,仅推荐过渡阶段使用
场景2:使用全新模块化API(推荐,可tree-shaking减少包体积)
这是v9的官方推荐写法,支持打包时移除未使用的Firebase代码,大幅缩减生产环境包体积,调整方式如下:
// 导入模块化API import { getApps, initializeApp } from 'firebase/app' // 其他服务导入对应模块化方法,比如auth:import { getAuth } from 'firebase/auth' let app if (getApps().length < 1) { app = initializeApp(firebaseConfig) // 其他产品初始化,比如:const auth = getAuth(app) } else { app = getApps()[0] }
内容的提问来源于stack exchange,提问作者Shivam
相关产品推荐
相关产品推荐

