React Native Expo Go运行报错: firebase is undefined 如何解决?
问题排查与解决方案
报错根因
你本地安装的是9.x及以上版本的Firebase,该版本默认使用模块化API,不再支持旧版本的命名空间默认导入语法,所以import firebase from 'firebase/app'导入的firebase变量为undefined,读取firebase.apps时就会触发该报错。
解决方案
方案1:适配新版Firebase模块化API(推荐)
直接替换原有代码为符合新版Firebase规范的写法即可:
// 改用模块化API导入 import { initializeApp, getApps } from 'firebase/app'; import { getAuth } from 'firebase/auth'; import Constants from 'expo-constants'; const firebaseConfig = { apiKey: Constants.manifest.extra.apiKey, authDomain: Constants.manifest.extra.authDomain, projectId: Constants.manifest.extra.projectId, storageBucket: Constants.manifest.extra.storageBucket, messagingSenderId: Constants.manifest.extra.messagingSenderId, appId: Constants.manifest.extra.appId, measurementId: Constants.manifest.extra.measurementId }; let Firebase, auth; // 用getApps()方法替代原有的firebase.apps属性 if (getApps().length === 0) { Firebase = initializeApp(firebaseConfig); } auth = getAuth(Firebase); // 可按需导出你需要用到的服务实例 export { auth }; export default Firebase;
后续用到Firebase其他服务(如Firestore、Storage)时,也统一使用模块化导入语法即可,例如import { getFirestore } from 'firebase/firestore'。
方案2:降级Firebase到8.x版本
如果不想修改原有代码逻辑,可直接将Firebase版本降级到最后一个支持命名空间导入的8.x版本:
# npm用户执行 npm install firebase@8.10.0 # yarn用户执行 yarn add firebase@8.10.0
降级完成后原有代码无需改动即可正常运行。
额外排查建议
- 确认你的
app.json/app.config.js中已经正确配置了extra字段下的所有Firebase配置项,避免配置读取失败引发后续异常 - 代码或依赖修改完成后,清除Expo Go缓存、重启开发服务器后重新加载应用,避免旧缓存导致报错依旧存在。
内容的提问来源于stack exchange,提问作者DavidWebb
相关产品推荐
相关产品推荐

