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

Posted

技术标签:

【中文标题】升级到 firebase js sdk v8 后,在“firebase”中找不到导出“firestore”(导入为“firebase”)【英文标题】:export 'firestore' (imported as 'firebase') was not found in 'firebase' after upgrading to firebase js sdk v8 【发布时间】:2021-04-15 21:40:09 【问题描述】:

我已将 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” import("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();

但这给了我以下错误:

Uncaught FirebaseError: Firebase: No Firebase App '[DEFAULT]' has been 创建 - 调用 Firebase App.initializeApp() (app/no-app)。

【问题讨论】:

【参考方案1】:

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

我从AngularFire的release notes注意到最新版本不支持旧版本的JS SDK,这是这个函数的来源,所以我删除了node_modules,package-lock.json文件,然后运行npm cache clean --force 然后 npm install 运行干净。什么都没做,但我觉得很有成就感。

然后我遇到了this thread,它解释了我的问题并通过更改库来编译

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

从“firebase/app”导入firebase;

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

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

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

【讨论】:

见:firebase.google.com/support/release-notes/…【参考方案2】:

对于那些在版本 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 doc

【讨论】:

完美运行!谢谢。你能告诉我你是怎么知道这个变化的吗? @Sobhani 没有问题! Tbh 最近在我重新迭代我的一个客户项目时发现了自己。注意到 v8.x.x -> v9.x.x 更新,因此检查了文档是否有任何重大更改。 为我工作谢谢兄弟! 非常感谢。【参考方案3】:

使用

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

而不是

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

这可能会有所帮助

【讨论】:

【参考方案4】:

其实你只需要这样做:

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

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

【讨论】:

以上是关于升级到 firebase js sdk v8 后,在“firebase”中找不到导出“firestore”(导入为“firebase”)的主要内容,如果未能解决你的问题,请参考以下文章

Firebase v9 在移动设备上加载大型 iframe.js (263K)

WebSphere V8.5 静默安装升级-使用响应文件静默安装软件包(生成相应文件,不安装)以及managesdk管理SDK

Node.js v8.0.0 正式发布,带来大量更新

从节点 v6.7.0 升级到 v8.11.1 时性能糟糕

使用 Firebase JS SDK 版本 9 实施 Stripe 订阅

Firebase 升级到 9.2.0 后,Google 登录 uid 和 firebase uid 不匹配