Javascript 升级到Firebase JS 8.0.0:尝试导入错误:';app&x27;不是从';firebase/app';(作为firebase导入)

Javascript 升级到Firebase JS 8.0.0:尝试导入错误:';app&x27;不是从';firebase/app';(作为firebase导入),javascript,typescript,firebase,Javascript,Typescript,Firebase,升级到8.0.0后,出现以下错误: 尝试导入错误:“initializeApp”未从“firebase/app”导出(作为“firebase”导入) 我的导入如下所示: 从“firebase/app”导入*为firebase firebase.initializeApp({…}) TypeScript还抱怨: “导入类型(“/path/to/my/file”)”上不存在属性“initializeApp”。ts(2339) 如何解决此问题?在版本中,Firebase SDK在处理导出的方式上发生

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

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

我的导入如下所示:

从“firebase/app”导入*为firebase
firebase.initializeApp({…})
TypeScript还抱怨:

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

如何解决此问题?

在版本中,Firebase SDK在处理导出的方式上发生了突破性的变化:

突破性更改:
浏览器
package.json文件中的字段现在指向ESM 捆绑包而不是CJS捆绑包。使用ESM导入的用户必须 现在使用默认导入,而不是名称空间导入

8.0.0之前

import * as firebase from 'firebase/app'
8.0.0之后

import firebase from 'firebase/app'
使用require('firebase/app')require('firebase')的代码将 仍然有效,但为了获得正确的打字(代码完成, 例如)用户应将这些require调用更改为
require('firebase/app')。默认值
require('firebase')。默认值
。这 是因为SDK现在对ESM包使用键入,而 不同的包共享一个打字文件

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

从“firebase/app”导入firebase
firebase.initializeApp({…})

如果您使用的是auth,则需要单独导入: 导入“firebase/auth”;
因为您并不是将所有内容都像“*作为firebase”一样导入。

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

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

我做这件事的方式。只有前两行是相关的,其他行只是作为我的代码的一部分添加的,但它非常一般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()

将XXXX替换为ur数据,只是要明确:)

这是一个更新问题,虽然您可以修复如何导入firebase,但无法修复如何将其导入到您使用的库中,您必须等待这些库更新

8.0.0之前 从“firebase/app”导入*作为firebase

8.0.0之后 从“firebase/app”导入firebase

类库的FirebaseUI身份验证尚未更新,自4月份以来我一直在等待FirebaseUI更新


我自己的错误提示:确保所有拼写正确,并尝试将其用于其他软件包(如消息传递)。我在此处找到了相关文档:示例(来自上述站点)://此导入加载firebase命名空间及其所有类型信息。从“firebase/app”导入firebase;//这些导入将单个服务加载到firebase命名空间中。导入“firebase/auth”;导入“firebase/数据库”@MikkoPöri是的,这是使用模块绑定器集成Firebase SDK的文档。这一部分在8.0.0中没有改变:@DougStevenson我怎样才能只导入类型
firebase.firestore
?对我来说,v8.0之后它就坏了。以前我从“firebase”导入了{firestore},它得到了适合我的类型@mesqueeb如果你有新问题,请单独发布。