调用firebaseApp.firestore()报is not a function错误该如何解决
问题原因
核心原因是你的项目安装的Firebase SDK版本为9.0及以上,但是代码使用的是8.x及更早版本的命名空间式API。v9默认移除了旧版本挂载在firebaseApp实例上的链式调用方法,所以调用firebaseApp.firestore()会报不存在该方法的错误。
解决方案
你可以根据自己的项目需求选择以下任意一种方案:
- 方案1:使用v9兼容包(无需大幅修改现有代码,适合快速修复老项目)
直接修改导入语句为compat兼容版本即可,原有初始化和调用逻辑完全不用改动:// 替换原有导入语句 import firebase from 'firebase/compat/app'; import 'firebase/compat/firestore'; import 'firebase/compat/auth'; // 以下原有代码完全保留 const firebaseApp = firebase.initializeApp({ apiKey: "", authDomain: "", databaseURL: '', projectId: "", storageBucket: "", messagingSenderId: "", appId: "", measurementId: "" }); const db=firebaseApp.firestore(); export default db; - 方案2:改用v9模块化API(官方推荐,打包体积更小、性能更好)
直接替换为v9的函数式写法:
注意采用该方案后,后续的数据库增删改查操作也要对应换成v9的函数式写法,不能再使用原有// 导入模块化API import { initializeApp } from "firebase/app"; import { getFirestore } from "firebase/firestore"; import { getAuth } from "firebase/auth"; const firebaseConfig = { apiKey: "", authDomain: "", databaseURL: '', projectId: "", storageBucket: "", messagingSenderId: "", appId: "", measurementId: "" }; const firebaseApp = initializeApp(firebaseConfig); // 获取firestore实例 const db = getFirestore(firebaseApp); // 需要auth可按下面方式导出 export const auth = getAuth(firebaseApp); export default db;db.collection().add()这类链式调用语法。
如果确认你安装的是Firebase 8.x版本仍出现该错误,可删除项目下的node_modules文件夹、package-lock.json或yarn.lock文件后重新执行npm install或yarn install即可解决。
内容的提问来源于stack exchange,提问作者shatakchhi
相关产品推荐
相关产品推荐

