TypeScript 导入语句在 Expo 项目中找不到 Firebase 模块

Posted

技术标签:

【中文标题】TypeScript 导入语句在 Expo 项目中找不到 Firebase 模块【英文标题】:TypeScript import statement cannot find Firebase module in Expo project 【发布时间】:2021-10-28 01:45:05 【问题描述】:

我正在启动一个全新的 Expo 项目,并遵循 2021 年 8 月 28 日发布的所有文档。Firebase 文档指定的导入语句不起作用。以下是重现的步骤。

expo init firebase-demo

选择blank (TypeScript) 并回车。

cd firebase-demo
expo install firebase

将此行添加到 App.tsx,如 docs 所说:

import  getAuth, createUserWithEmailAndPassword  from "firebase/auth";

您会收到此错误:模块“firebase/auth”没有导出成员“getAuth”。

关于出了什么问题的线索是,在 VS Code 中,如果我通过命令单击 "firebase/auth",它会打开 node_modules/firebase/empty-import.d.ts,其全部内容是:

declare namespace empty 
export = empty;

有一个 node_modules/firebase/auth 目录。为什么导入语句没有发现?

这是我的 tsconfig.json,我没有根据 expo init 创建的内容进行修改:


  "extends": "expo/tsconfig.base",
  "compilerOptions": 
    "strict": true
  

【问题讨论】:

【参考方案1】:

我遇到了同样的问题。我的解决方案是:

添加:"exclude": ["node_modules", "node_modules/**/*"] 给你的jsconfig.json 然后Ctrl+Shift+P -> Reload window

我遇到的另一个解决方案:

做同样的事情,但在编辑 jsconfig.json 之前从项目中删除 node_modules 文件夹并在 Ctrl+Shift+P -> Reload Window 之后运行 npm install

【讨论】:

【参考方案2】:

我通过将 firebase 升级到 9.0.0 解决了这个问题。这个问题似乎是由于expo install firebase 安装了一个相当旧的版本 - 8.2.3,从 7 个月前开始。当前版本是 9.0.0,当前的文档大概就是为了这个。我将谨慎行事,因为 9.0.0 未经认证可与 Expo 一起使用。 (我想另一种可能的解决方案是查找 8.2.3 的文档)。

【讨论】:

以上是关于TypeScript 导入语句在 Expo 项目中找不到 Firebase 模块的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript 类型定义最佳实践

导入 gridster TypeScript 定义

SyntaxError:无法在模块外使用 import 语句:运行 Jest-expo 测试时

如何为 TypeScript 配置 `*.graphql` 导入?

将 require 与 Typescript 和 Expo 一起使用时出现“无效呼叫”

Mocha + TypeScript:不能在模块外使用导入语句