首页 > 解决方案 > 升级到 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)。

标签: angulartypescriptfirebaseangularfire

解决方案


当我更新到 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(); }

希望这会有所帮助 - 这是一个棘手的错误。


推荐阅读