在Firebase/React Native(Expo)中找不到变量IDBIndex。

10
我正在使用Expo和Firebase作为后端开发RN应用。目前,该应用仅使用Firebase身份验证和Firestore。不知道为什么,我突然开始收到“ReferenceError: Can't find variable: IDBIndex”的错误。我调整了我的Firebase配置以适应v9标准,而不是使用“compat”包。我确保我的应用程序没有使用Google Analytics。我还将firebase版本降级为firebase@9.1.0,与expo文档和这个类似的post相匹配。 我还回退到先前的应用程序版本(具有早期依赖项和代码),但仍然返回相同的错误。当出现这种情况时,我完全重新安装了node和npm,因为我认为这可能是唯一可能发生这种情况的原因,但这也毫无效果(仍然出现相同的IDB错误)。我仍然认为这是一个与Firebase相关的问题,但我已经没有任何想法可以解决它。
以下是我的Firebase配置:
import { initializeApp } from 'firebase/app'
import { getAuth, connectAuthEmulator } from "firebase/auth";
import { getFirestore, connectFirestoreEmulator } from "firebase/firestore";

import {
  FIREBASE_API_KEY,
  FIREBASE_AUTH_DOMAIN,
  FIREBASE_PROJECT_ID,
  FIREBASE_STORAGE_BUCKET,
  FIREBASE_MESSAGING_SENDER_ID,
  FIREBASE_APP_ID,
  FIREBASE_MEASUREMENT_ID,
} from '@env';

const firebaseConfig = {
  apiKey: FIREBASE_API_KEY,
  authDomain: FIREBASE_AUTH_DOMAIN,
  projectId: FIREBASE_PROJECT_ID,
  storageBucket: FIREBASE_STORAGE_BUCKET,
  messagingSenderId: FIREBASE_MESSAGING_SENDER_ID,
  appId: FIREBASE_APP_ID,
  measurementId: FIREBASE_MEASUREMENT_ID,
};

const app = initializeApp(firebaseConfig);

export default app;
export const auth = getAuth(app);
export const firestore = getFirestore(app);

if (process.env.NODE_ENV === "development") {
    connectAuthEmulator(auth, "http://localhost:9099");
    connectFirestoreEmulator(firestore, "localhost", 8080);
}

如果您需要查看更多文件或了解更多细节,请告诉我。

10个回答

14

这里是 Firebaser。

我们的 JavaScript SDK 出现了问题,Firebase 安装服务使用的 IDB 版本不支持浏览器环境之外的 ESM。该问题在 JavaScript SDK 的 9.6.9 版本中已得到修复,请确保更新到该版本。


8

我遇到了相同的问题,看起来是在几天前发布的 "firebase": "^9.6.8", 上出了问题。请使用"firebase": "9.6.7",


仍然遇到相同的烦人错误!你还有其他的技巧吗? - On the way to success
2
你是否尝试过没有插入符号的上述版本? "firebase": "9.6.7" - Junius L
带着插入符号它能正常工作。 - Muhammad Ashfaq
1
我可以确认,从9.6.8降级到9.6.7也解决了我的问题。确保你只指定了@JuniusL指定的特定版本。 如果这样做没有解决问题,请删除你的node_modules文件夹,并使用yarn或npm重新安装所有内容。 - Sebastien F.
1
这对我有用,只要确保在版本号前面加上符号 (^),然后把"firebase": "9.6.7"放进去就行了。 - Sherif Shendidy
@JuniusL。是的,它起作用了! - On the way to success

2
我一直遇到同样的问题,尝试了和你一样的所有方法,但都没有成功。我从Firebase测试实验室中解析了日志,并得出了以下结果:Stacktrace
通常来说,我不知道所有这些库是如何一起工作的,但是你是否正在使用Firestore的Typesense?我想知道你的堆栈跟踪是否调用了相同的文件,但我找不到任何确凿的证据。如果我发现了什么,我会继续更新这个线程。(我本来想评论的,但我还没有足够的声望)
更新:看起来我的构建程序自己修复了,即使提交了这个周末会不断崩溃的构建程序。所以我真的不知道发生了什么,但可能已经解决了。

嗨Ewan,我的情况是发现它确实是一个依赖错误。我是通过删除节点模块和yarn.lock,然后重新安装所有这些来找到的。在此之后,当我执行expo start时,Expo开始警告我某些依赖项的版本不正确。我执行了expo update,问题就得到了解决。也许你也可以尝试一下这个方法。 - perrywinkle
在使用 expo update 命令时要小心,确保在执行该命令之前先对项目进行 git 提交,因为它可能会破坏一些东西。在我的情况下,有问题的依赖项包括 safe-area-contextgesture-handlerreanimated@gorhom/bottom-sheet 等等。我的堆栈跟踪指示与 tslib 有关,但最终并没有提供任何帮助。 - perrywinkle
"expo update" 对我来说不起作用。 - Junius L
嘿@JuniusL。说实话,我觉得这个错误信息确实非常模糊,可能会因为许多不同的原因而发生。也尝试其他答案中建议的降级。 - perrywinkle

2

之前的错误消失了,但是却被其他不同的错误所代替!你还尝试过其他什么吗?是什么原因导致这种情况?谢谢。 - On the way to success
2
请注意,从v9降级到v8会导致一些兼容性问题,因为v9代码与v8 firebase代码编写方式不同。这可能是导致您出现新错误的原因。@Onthewaytosuccess - perrywinkle
@perrywinkle 那肯定是其他错误的原因。 - On the way to success

1

我曾经遇到过同样的问题,尝试了多个不同版本的firebase,最终找到了解决错误的版本:

npm install firebase@9.4.1 --save

我在这里找到了这个信息:开始使用Cloud Firestore


嗨,Leena,是什么导致了错误?你尝试的版本对我不起作用!现在出现了其他烦人的错误。你还尝试了什么?谢谢。 - On the way to success
前一个版本可以使用。9.6.7。 - Junius L
1
@Onthewaytosuccess 我认为这可能与某些依赖版本不兼容有关。在我的错误消息中,它说错误发生在node_modules/react-native中。这就是为什么我尝试更改版本号以查看哪个可行的原因! - Leena D.
@LeenaDomadia 对我来说,它是 node_modules\tslib\tslib.js。这对你有什么启示吗? - On the way to success
@Onthewaytosuccess 我还没有遇到过这个问题。这是一个奇怪的错误,因为似乎每个人都会收到相同的错误信息,但是在不同的node_modules文件中。很难确定错误的确切原因。 - Leena D.
1
@LeenaD。现在它可以工作了。这是由于Firebase版本不匹配引起的。 - On the way to success

1

本帖中提到的其他修复方法肯定都是有效的(我看过其他论坛帖子建议firebase降级,但在我的情况下它没有起作用。)

我认为确认一下在我的情况下解决问题的方法可能会有所帮助。问题出现在我的团队成员使用npm而不是expo(默认使用yarn)安装依赖项时。这导致了yarn.lockpackage-lock.json之间的同步问题。这本身并不会引起太大的问题,因为简单的yarnyarn install <dependency>就可以解决问题。然而,这个依赖项恰好需要预先存在的依赖项,这些依赖项的版本与我的expo版本“期望”的版本不同。关于如何触发IDBIndex错误仍然是一个谜,但最后我只需要删除所有锁定文件和node_modules,执行expo update,最后执行yarn重新安装所有兼容的包。

如果任何人在查看此答案时能够给出可能解释为什么会解决问题的原因,那将不胜感激。


那些“现在兼容的软件包”是什么? - On the way to success
1
基本上,之前引起问题的众多软件包(因为它们的版本与 Expo“期望”的版本不同)。 - perrywinkle

1

以下是我使用yarn成功解决问题的步骤:

  1. 删除node_modules文件夹
  2. 删除yarn.lock文件
  3. 降级firebase版本至"9.6.7",使用命令yarn add firebase@9.6.7
  4. 使用yarn install下载依赖包
  5. 确保所有导入firebase的语句都来自于正确的firebase库。我使用的是expo,之前同时导入了firebase和react-native-firebase,这导致了问题。暂时删除react-native-firebase,直到如有必要后再重新引入。
  6. 修复我的语句导入方式。现在你可以像这样导入firebase import firebase from "firebase/compat"

0

0
如果您使用 Firebase Analytics,请将其删除。
Firebase 版本 "firebase": "9.6.7"

import { initializeApp } from 'firebase/app';
import { getFirestore } from 'firebase/firestore';
// import { getAnalytics } from "firebase/analytics";

const firebaseConfig = {
  apiKey: process.env.FIREBASE_APP_KEY,
  authDomain: process.env.FIREBASE_AUTH_DOMAIN,
  projectId: process.env.FIREBASE_PROJECT_ID,
  storageBucket: process.env.FIREBASE_STORAGE_BUCKET,
  messagingSenderId: process.env.FIREBASE_MESSAGING_SENDER_ID,
  appId: process.env.FIREBASE_APP_ID,
  measurementId: process.env.FIREBASE_MEASUREMENT_ID,
};

export const app = initializeApp(firebaseConfig);

// export const analytics = getAnalytics(app);

export const firestore = getFirestore(app);


0

我曾经遇到过同样的问题,我只是降级了 Firebase 版本,然后它就可以工作了。 你可以使用以下代码进行降级:

npm install firebase@9.4.1 --save

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接