升级到 Firebase JS 8.0.0:尝试导入错误:“app”未从“firebase/app”导出(导入为“firebase”)

Dou*_*son 37 javascript firebase typescript

升级到 8.0.0 后,出现以下错误:

尝试导入错误:“initializeApp”未从“firebase/app”导出(导入为“firebase”)。

我的导入看起来像这样:

import * as firebase from "firebase/app"
firebase.initializeApp({ ... })
Run Code Online (Sandbox Code Playgroud)

TypeScript 也抱怨:

类型“typeof import("/path/to/my/file")”上不存在属性“initializeApp”。ts(2339)

我该如何解决?

Dou*_*son 126

8.0.0版本中,Firebase SDK 处理导出的方式发生了重大变化:

重大变化:browserpackage.json 文件中的字段现在指向 ESM 包而不是 CJS 包。使用 ESM 导入的用户现在必须使用默认导入而不是命名空间导入。

8.0.0 之前

import * as firebase from 'firebase/app'
Run Code Online (Sandbox Code Playgroud)

8.0.0之后

import firebase from 'firebase/app'
Run Code Online (Sandbox Code Playgroud)

使用require('firebase/app')require('firebase')仍然有效的代码,但为了获得正确的类型(例如,用于代码完成),用户应该将这些 require 调用更改为 require('firebase/app').defaultrequire('firebase').default。这是因为 SDK 现在对 ESM 包使用类型化,并且不同的包共享一个类型化文件。

因此,您必须使用新的 ESM 包默认导出:

import * as firebase from 'firebase/app'
Run Code Online (Sandbox Code Playgroud)

如果您使用的是SDK 版本 9.0,请改为阅读以下问题:


小智 10

导入 firebase 的旧方法:从“firebase/app”导入 * 作为 firebase;

在 8.0.0 版本中导入的新方法:从“firebase/app”导入 firebase

例如:我这样做的方式。只有前 2 行是相关的,其他行仅作为我的代码的一部分添加,但它非常通用 tbh!

import firebase from "firebase/app"
import "firebase/auth"

const firebaseConfig = {
  apiKey: XXXX,
  authDomain: XXX,
  projectId: XXXX,
  storageBucket: XXXX,
  messagingSenderId: XXXX,
  appId: XXXX,
}


if (!firebase.apps.length) {
  firebase.initializeApp(firebaseConfig)
}


export const auth = firebase.auth() 
export const googleAuthProvider = new firebase.auth.GoogleAuthProvider()
Run Code Online (Sandbox Code Playgroud)

用你的数据替换 XXXX,只是要清楚:)


小智 5

尝试将其用于上面的 firebase 9

import firebase from 'firebase/compat/app';
import 'firebase/compat/auth';
import 'firebase/compat/firestore';
Run Code Online (Sandbox Code Playgroud)

或者您可以阅读更多信息:https://firebase.google.com/docs/web/modular-upgrade


归档时间:

查看次数:

38470 次

最近记录:

4 年 前