firebase.auth 不是函数

IT技术 javascript reactjs firebase webpack
2021-02-01 09:57:03

我正在使用带有 firebase 和 firebase-admin 的 Webpack。

安装firebase我跑了

npm install --save firebase

我正在使用导入 firebase,

import * as firebase from 'firebase/app'
import 'firebase/auth'

我也试过

import * as firebase from 'firebase'

我试过

const firebase = require('firebase')

正如网络入门指南中所建议的

firebase.auth()但是,当我尝试使用时出现错误

console.js:32 TypeError: firebase.auth 不是函数

当我使用调试器进行检查时,firebase我发现它实际上没有auth功能:

> firebase
 {__esModule: true, initializeApp: ƒ, app: ƒ, Promise: ƒ, …}

如何使用 webpack 将 auth() 作为函数包含在内?

谢谢。

6个回答

好的,通过删除我的node_modules目录并重新安装所有内容来解决此问题

我也像这样导入firebase:

import firebase from 'firebase'
require('firebase/auth')

我不知道。

¯\_(ツ)_/¯
这对我不起作用,似乎是当您在同一个软件包中安装了 firebase 和 firebase-admin 时出现的问题。降级到 firebase@v4.7.0 对我有用,问题出现在 firebase@v4.8.0。该问题正在此处的firebase 存储库中讨论]( github.com/firebase/firebase-js-sdk/issues/752 )。
2021-03-19 09:57:03
可以确认@isTravis 的信息解决了我的问题。我的 package.json 中有 firebase 5.4.1 和 firebase-admin 6.0.0。npm update firebase将我升级到 5.5.4 并且 firebase.auth() 不是函数问题开始出现。firebase-admin 包甚至没有在我的应用程序中使用,所以我npm uninstall firebase-admin和一切都再次开始工作。
2021-03-20 09:57:03
哇,搜索了三个小时后,这解决了我的问题。谢谢
2021-03-21 09:57:03
我过去也这样做过。
2021-03-24 09:57:03
也为我工作,但我不需要重新安装 node_modules。谢谢。
2021-04-12 09:57:03

我知道你已经解决了你的问题,但是对于原来的问题没有真正的答案。问题不在于node_modules,而在于您导入组件的方式。

当您以通常的方式导出组件 ES6 时 export default () => { console.log('default component export'); };

default是这里的关键字,当您以 ES6 的方式导入组件时,就像import firebase from 'firebase'default从导出的对象中获取属性一样

记住上面的例子,这是你做错的地方。

使用 ES6:

import * as firebase from 'firebase'

console.log(firebase.auth) // Undefined
console.log(firebase.default.auth) // Function

使用 ES5:

var firebase = require('firebase')

console.log(firebase.auth) // Undefined
console.log(firebase.default.auth) // Function

请注意 .default

希望这有助于首先解释什么是错误的。

我知道了。我在浏览器中尝试过。我认为问题可能与 webpack 相关,这就是我使用浏览器的原因
2021-03-29 09:57:03
你测试过这个吗?当我运行它时,我得到了 auth 和 default.auth 的有效条目。我的控制台: snag.gy/fWIUCs.jpg和我的代码:snag.gy/hyAoum.jpg
2021-04-08 09:57:03
@radarbob 似乎取决于您使用的环境。我测试了 Joao 的答案,但它在我的环境中不起作用。我被一些疯狂的 Babel Webpack 第 1 版恶作剧困住了。它通过重新安装软件包为我修复,并且该答案已被多次投票,因此这意味着它可能对其他人也有效。所以自动授予了这个答案的赏金。无论如何,Joao 的回应似乎确实有助于澄清这个新世界中有关 javascript 导入的一些事情,尽管它并没有解决我遇到的问题。
2021-04-09 09:57:03
当我尝试时没有工作。虽然在节点上尝试过,而不是在浏览器上
2021-04-13 09:57:03
“总是喜欢非货物崇拜的答案”。所以如果我明白:(a) 重新安装软件包是一种红鲱鱼。(b)中任一require ('firebase')firebase.default.authOR require(firebase/auth)`然后firebase.auth+1
2021-04-14 09:57:03

我一直收到一个错误说

“类型错误:firebase.auth 不是函数”

我让 auth 对象出现,我做的不同的事情是以不同的顺序安装module。

我第一次安装module时(这是 auth 对象没有出现的时候):

// this seems to confuse things with the auth object when installed in this order
$ npm install firebase-admin --save
$ npm install firebase --save

我删除了 npm 文件夹并从头开始,尽管这次我颠倒了安装顺序:

// for some reason this worked and now I can access the auth object
$ npm install firebase --save
$ npm install firebase-admin --save

我没有做任何其他事情。我只是通过先安装 firebase 再安装 firebase-admin 来颠倒安装顺序。

我希望这对其他人有用。

你可以在这里读更多关于它的内容

需要注意的是firebase-admin(这仅仅是一个火力点客户端管理员权限)并不打算在前端应用程序中使用像reactJS或VueJS但只有在一个安全的服务器环境,比如在文档中表示firebase.google.com/docs/auth/ admin/manage-users#create_a_user否则这将是一个很大的安全漏洞。一种解决方案是使用云功能并通过非管理员客户端可以执行的操作触发它
2021-03-19 09:57:03
为我工作,谢谢!详情请见:github.com/firebase/firebase-js-sdk/issues/...
2021-03-24 09:57:03
我知道这很奇怪。几个月来我一直为此头疼,做了大量研究,但没有任何效果。我只是随机决定尝试一下,它奏效了。这实际上是一个幸运的猜测。🤷🏾‍♂️
2021-04-06 09:57:03

只需添加 >

import firebase from '@firebase/app';
require('firebase/auth');

进入你的项目

为什么需要而不是导入?
2021-03-29 09:57:03
您也可以使用导入语句;``` 从“firebase/app”导入 Firebase;导入'firebase/auth';``
2021-04-13 09:57:03

这是来自官方文档的导入声明

// Firebase App (the core Firebase SDK) is always required and must be listed first
import firebase from "firebase/app";
// Add the Firebase products that you want to use
import "firebase/auth";
console.log(firebase.auth);

如果您只需要身份验证,这些似乎也有效: 编辑:下面的代码适用于 Firebase 7 软件包,但不再适用于版本 8。Firebase 9 将再次更改。只要坚持文档,您就可以了。

import { auth } from "firebase/app";
import "firebase/auth";
console.log(auth);

或者

import { auth } from "firebase";
console.log(auth);