升级到 firebase js sdk v8 后,在“firebase”中找不到导出“firestore”(导入为“firebase”)

问题描述 投票:0回答:8

我已将 firebase JS SDK 从 v7 升级到 v8.0.0,并且像这样导入 firebase。

import * as firebase from 'firebase';

访问以下任何一项都会导致以下错误。

firebase.firestore.FieldValue.serverTimestamp()
firebase.User
firebase.auth.UserCredential

在以下位置找不到导出“firestore”(导入为“firebase”) '火力基地' 类型“typeof”上不存在属性“firestore” 导入(“appPath/node_modules/firebase/index”)'

我找到了一种解决方法,将 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 应用程序“[DEFAULT]” 创建 - 调用 Firebase App.initializeApp() (app/no-app)。

angular typescript firebase angularfire
8个回答
31
投票

对于那些在版本 9 Firebase 上遇到类似错误的人,请确保将路径更改为:

import firebase from 'firebase/compat/app';
import 'firebase/compat/auth';
import 'firebase/compat/firestore';
...

而不是:

import firebase from 'firebase/app';
import 'firebase/auth';
import 'firebase/firestore';
...

取自 firebase 文档


15
投票

当我更新到 Angular 11 时,我遇到了同样的问题。我尝试修复安装 firebase-admin 库,并按照 this thread 的指示进行操作,但这不应该在浏览器中运行,并导致了一些其他问题,所以我放弃了。

我从AngularFire的发行说明中注意到,最新版本不支持旧版本的JS SDK,而这正是这个函数的来源,所以我删除了node_modules,package-lock.json文件,并运行了npm cache clean --force 然后 npm install 来运行 clean。虽然什么也没做,但我感到很有成就感。

然后我遇到了这个线程,它解释了我的问题,并通过更改库来编译内容

'从'firebase/app'导入*作为firebase;

从“firebase/app”导入 firebase;

这消除了“找不到 firestore”错误并且编译正确。与原始代码一起使用:

获取 firebaseTimestamp() { 返回 firebase.firestore.FieldValue.serverTimestamp(); }

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


4
投票

使用

import firebase from "firebase/app";
import "firebase/database";

而不是

'import * as firebase from 'firebase/app';

这可能有帮助


3
投票

之前:版本8

import firebase from 'firebase/app';
import 'firebase/auth';
import 'firebase/firestore';

更改为====>

之后:版本 9 紧凑版

import firebase from 'firebase/compat/app';
import 'firebase/compat/auth';
import 'firebase/compat/firestore';

1
投票

您好,这是我使用的表格

从 '@angular/fire/compat/auth' 导入 { AngularFireAuth };


从“firebase/compat/app”导入 firebase;

希望有帮助!


0
投票

其实你只需要做:

import "firebase/compat/database"; // in angular-fire-database.js

import firebase from 'firebase/compat/app'; // in angular-fire.js

0
投票

编译时出现问题:在“firebase/app”中找不到导出“default”(导入为“firebase”)

import firebase from 'firebase/app';
import { auth } from '../misc/firebase';

根据v9更新,我更改了导入语句,但错误仍然存在

import firebase from 'firebase/compat/app';

0
投票

您的 config.js 文件的问题在于您如何初始化 Firebase 存储和 Firestore 实例。

在 Firebase 版本 9(也称为 Modular SDK)中,初始化 Firebase 和访问其服务的方法发生了变化。您应该使用模块化 Firebase SDK 语法,而不是 Firebase 版本 8 及更低版本中使用的命名空间导入方法。

以下是使用 Firebase Modular SDK 语法更正 config.js 文件的方法:

从“firebase/app”导入{initializeApp}; 从“firebase/storage”导入{getStorage};

© www.soinside.com 2019 - 2024. All rights reserved.