angular - 升级到 firebase js sdk v8 后,在“firebase”中找不到导出“firestore”(导入为“firebase”)
问题描述
我已将 firebase JS SDK 从 v7 升级到 v8.0.0,并且我正在像这样导入 firebase。
import * as firebase from 'firebase';
访问以下任何内容都会导致以下错误。
firebase.firestore.FieldValue.serverTimestamp()
firebase.User
firebase.auth.UserCredential
在“firebase”中找不到导出“firestore”(导入为“firebase”)“typeof import(“appPath/node_modules/firebase/index”)类型上不存在属性“firestore”
我通过将 firebase 更改为 firebase.default 找到了一种解决方法,例如
firebase.default.firestore.FieldValue.serverTimestamp()
这是解决此问题的正确方法吗?
编辑:我也在项目中使用 AngularFire。我尝试使用:
import firebase from 'firebase/app';
import 'firebase/firestore';
export const firestore = firebase.firestore();
但这给了我以下错误:
未捕获的 FirebaseError:Firebase:没有创建 Firebase App '[DEFAULT]' - 调用 Firebase App.initializeApp() (app/no-app)。
解决方案
当我更新到 Angular 11 时遇到了同样的问题。我尝试修复以安装 firebase-admin 库并按照该线程的指示进行操作,但这不应该在浏览器中运行并导致其他一些问题,所以我放弃了那个。
我从 AngularFire 的发行说明中注意到,最新版本不支持旧版本的 JS SDK,这是这个函数的来源,所以我删除了 node_modules,package-lock.json 文件,并运行 npm cache clean - -force 然后 npm install 运行干净。那没有任何作用,但我觉得很有成就感。
然后我遇到了这个线程,它解释了我的问题并通过更改库来编译
'import * as firebase from 'firebase/app';
到
从'firebase/app'导入firebase;
这消除了“找不到firestore”错误并正确编译。使用原始代码:
获取 firebaseTimestamp() { return firebase.firestore.FieldValue.serverTimestamp(); }
希望这会有所帮助 - 这是一个棘手的错误。
推荐阅读
- javascript - 使用对象内的对象过滤数组
- laravel - 如何通过 bcrypt 函数将密码从种子插入数据库我的代码如下所示
- sql-server - 使用子选择向视图添加更多列
- java - 换行符换行符
- sql - T-SQL:WHERE <> 返回错误结果
- r - 如何为 data.table 中的左连接创建匹配标志
- android - Android Studio 找不到 com.jakewharton:butterknife-compiler:5.1.2
- javascript - Diamond-Square 实现产生过高的值
- reactjs - 如果日期是该月的最后一天,则在 d3 折线图中无法看到月份名称
- mysql - 协助 MySQL 'LIKE' 语句