Firebase v8调用firebase.database().ref时报database不是函数错误
问题成因
- Firebase v8采用模块化拆分设计,核心包仅包含基础初始化能力,Realtime Database属于独立功能模块,未单独引入对应模块的话,
database方法不会挂载到全局firebase对象上,调用时就会抛出找不到方法的报错。 - 若使用包管理器安装依赖,也可能是实际安装的Firebase版本并非v8大版本,v9及以上版本采用全新的模块化API写法,不兼容v8的命名空间调用方式,也会触发该报错。
解决方案
- 优先补充引入Realtime Database模块
- 若使用CDN引入:确保在firebase核心包的script标签之后,追加对应v8版本的firebase-database引入标签即可。
- 若使用npm/yarn安装依赖:在firebase初始化的代码文件顶部,补充导入database模块,必须在初始化前导入,完整导入写法参考如下:
import firebase from 'firebase/app' // 你已引入的其他模块 import 'firebase/firestore' import 'firebase/storage' import 'firebase/auth' // 新增database模块引入 import 'firebase/database' // 后续初始化代码保持不变 firebase.initializeApp(firebaseConfig); firebase.firestore().settings( { timestampsInSnapshots: true }) const storage = firebase.storage(); const store = firebase.firestore(); const authenticate = firebase.auth(); var matchref = firebase.database().ref("users"); - 确认依赖版本正确
执行npm list firebase命令查看当前安装的Firebase版本,若版本号为9.x.x及以上,要么回退到最新的v8稳定版(8.10.0),要么调整代码适配v9及以上版本的API写法。 - 若使用webpack等构建工具,修改完成后清除构建缓存重新编译,避免旧缓存导致修改不生效。
内容的提问来源于stack exchange,提问作者chackerian
相关产品推荐
相关产品推荐

