无法使用 React Native Expo 导入 Firebase JS SDK

Posted

技术标签:

【中文标题】无法使用 React Native Expo 导入 Firebase JS SDK【英文标题】:Unable to import Firebase JS SDK with React Native Expo 【发布时间】:2021-11-28 07:52:45 【问题描述】:

在我的 React Native 应用程序中,我正在尝试将 Firebase JS SDK 与 this guide 中提到的 Expo 结合使用,尽管在通过 expo install firebase 安装依赖项后,我无法从 firebase/auth 导入模块。调用 getAuth() 等相应方法会导致以下错误:

TypeError: (0, _auth.getAuth) is not a function. (In '(0, _auth.getAuth)()', '(0, _auth.getAuth)' is undefined)

我也无法从firebase/databasefirebase/firestore 等导入模块。

我的项目是使用 Typescript 设置的,但我在纯 JS 项目中也遇到了这个问题。

我可以从 firebase/app 导入 firebase,但不能从相应的模块导入:

编辑:我在以下上下文中使用getAuth() 和其他方法:

React.useEffect(() => 

 if (response?.type === "success") 
  const  id_token  = response.params;

  const auth = getAuth();      
  const provider = new GoogleAuthProvider();
  const credential = provider.credential(id_token);
  signInWithCredential(auth, credential);
 
, [response]);

我使用的是 Firebase 8.2.3。

【问题讨论】:

你能分享完整的,包括 getAuth() 的使用吗?您还安装了哪个版本的 Firebase? 我更新了问题,我使用的是 Firebase 8.2.3 【参考方案1】:

您使用的导入语法适用于 Firebase SDK 版本 9 及更高版本。对于版本 8 及以下版本,请使用:

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

然后使用如here所示的v8语法。

【讨论】:

谢谢,这行得通。当expo install firebase 安装 v8 时,我真的不明白为什么 Expo 指南使用 SDK v9 语法。此外,他们最新的 SDK 版本 (v42) 甚至还与 Firebase SDK v9 不兼容,所以不知道他们在编写本指南/文档时的想法。【参考方案2】:

不幸的是,最新的 expo sdk 与 firebase9 不兼容,如果您使用此版本的 firebase,您会看到奇怪的错误提示,请使用 firebase 版本 8

【讨论】:

以上是关于无法使用 React Native Expo 导入 Firebase JS SDK的主要内容,如果未能解决你的问题,请参考以下文章

无法将 babel-plugin-module-resolver 与 expo 和 react-native 一起使用

未知的执行上下文错误 - 将领域导入 Expo React Native IOS 应用程序

无法使用 react-native-svg 或 Svg/expo 让 Svg 显示在 react-native 中

使用 Expo 运行时,create-react-native-app 无法构建 javascript 包

尝试在 create-react-native-app 项目 (expo) 中使用 react-native-fs

主目录之外的React-Native导入文件