firebase.auth不是一个函数

Eri*_*ner 35 javascript firebase reactjs webpack

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

为了安装firebase,我跑了

npm install --save firebase
Run Code Online (Sandbox Code Playgroud)

我正在使用导入firebase,

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

我也试过了

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

我试过了

const firebase = require('firebase')
Run Code Online (Sandbox Code Playgroud)

正如网站入门指南中所建议的那样

当我尝试使用firebase.auth()但是我得到一个错误

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

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

> firebase
 {__esModule: true, initializeApp: ƒ, app: ƒ, Promise: ƒ, …}
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

编辑:这不是评论中问题的重复.该问题指的是作为auth服务成员的方法,而不是auth服务本身.

Eri*_*ner 40

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

我也是这样导入firebase:

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

我不知道.

¯\_(?)_/¯
Run Code Online (Sandbox Code Playgroud)

  • 这对我不起作用,似乎是在同一软件包中同时安装了firebase和firebase-admin时出现的问题。降级到firebase@v4.7.0对我有用,问题出现在firebase@v4.8.0上。这个问题正在firebase仓库中讨论] [https://github.com/firebase/firebase-js-sdk/issues/752)。 (3认同)
  • 也为我工作,但我不需要重新安装 node_modules。谢谢。 (2认同)

Lan*_*ria 18

我一直收到一个错误说

"TypeError:firebase.auth不是函数"

我得到了auth对象,而我做的不同的是以不同的顺序安装模块.

我第一次安装模块(这是在没有出现auth对象时):

// this seems to confuse things with the auth object when installed in this order
$ npm install firebase-admin --save
$ npm install firebase --save
Run Code Online (Sandbox Code Playgroud)

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

// for some reason this worked and now I can access the auth object
$ npm install firebase --save
$ npm install firebase-admin --save
Run Code Online (Sandbox Code Playgroud)

我什么也没做.我只是通过先安装firebase和firebase-admin第二个来反转安装顺序.

我希望这适用于其他人.

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

  • 这对我有用。非常特殊的行为。 (2认同)
  • 同意.这很奇怪但有效. (2认同)

Joa*_*pes 15

我知道你已经解决了你的问题,但对原始问题没有真正的答案.问题不在于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
Run Code Online (Sandbox Code Playgroud)

使用ES5:

var firebase = require('firebase')

console.log(firebase.auth) // Undefined
console.log(firebase.default.auth) // Function
Run Code Online (Sandbox Code Playgroud)

请注意 .default

希望这有助于解释首先出现的问题.

  • 你测试过这个吗?当我运行它时,我得到了 auth 和 default.auth 的有效条目。我的控制台:https://snag.gy/fWIUCs.jpg 和我的代码:https://snag.gy/hyAoum.jpg (2认同)

小智 11

此错误的主要原因可能是由于最新的 Firebase 版本 v9.1.1,在此版本中 Firebase 导入已更改。

Before: version 8

import firebase from 'firebase/app';
import 'firebase/auth';
import 'firebase/firestore';
Run Code Online (Sandbox Code Playgroud)
// v9 compat packages are API compatible with v8 code
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


Gay*_*age 8

虽然这个问题背后有很多根本原因,但也可能是这样一个简单的原因。

尽管我在 JS 代码中使用了它们,但我忘记包含 auth 和 db 的 js 文件。

修复前;

<!-- Firebase App (the core Firebase SDK) is always required and must be listed first -->
<script src="https://www.gstatic.com/firebasejs/6.1.1/firebase-app.js"></script>
Run Code Online (Sandbox Code Playgroud)

修复后;

<!-- Firebase App (the core Firebase SDK) is always required and must be listed first -->
<script src="https://www.gstatic.com/firebasejs/6.1.1/firebase-app.js"></script>

<!-- Add Firebase products that you want to use -->
<script src="https://www.gstatic.com/firebasejs/6.1.1/firebase-auth.js"></script>

<script src="https://www.gstatic.com/firebasejs/6.1.1/firebase-database.js"></script>
Run Code Online (Sandbox Code Playgroud)


小智 8

这是因为未添加 firebase-auth 脚本。

首先,您必须通过以下方式在节点模块中安装 npm 文件

npm install firebase --save
npm install firebase-admin --save
Run Code Online (Sandbox Code Playgroud)

然后你必须在 firebase-app 脚本之后添加 firebase.auth 的脚本并确保版本相同。

修复前:

<script src="https://www.gstatic.com/firebasejs/7.8.1/firebase-app.js"></script>
Run Code Online (Sandbox Code Playgroud)

修复后,您需要添加脚本,然后添加您的 FIREBASE 帐户脚本,如下所示

<script src="https://www.gstatic.com/firebasejs/7.8.1/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.8.1/firebase-auth.js"></script>
Run Code Online (Sandbox Code Playgroud)

那么它应该可以正常工作


Tim*_*ann 8

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

// 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);
Run Code Online (Sandbox Code Playgroud)

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

import { auth } from "firebase/app";
import "firebase/auth";
console.log(auth);
Run Code Online (Sandbox Code Playgroud)

或者

import { auth } from "firebase";
console.log(auth);
Run Code Online (Sandbox Code Playgroud)


小智 6

只需添加>

import firebase from '@firebase/app';
require('firebase/auth');
Run Code Online (Sandbox Code Playgroud)

进入您的项目

  • 您也可以使用导入语句;``` 从“firebase/app”导入 Firebase;导入'firebase/auth';`` (3认同)
  • 为什么需要而不是导入? (2认同)

小智 6

您只需要使用导入如下

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

在上述情况下,身份验证和数据库服务都被使用。对于任何其他服务,您只需要像这样导入。


小智 6

使用 firebase v9,您不能再使用这样的身份验证了。相反,您需要从“firebase/auth”导入身份验证,例如:

import { getAuth, createUserWithEmailAndPassword } from "firebase/auth";
Run Code Online (Sandbox Code Playgroud)

如果您需要导出 auth 对象

const auth = getAuth();
export { auth };
Run Code Online (Sandbox Code Playgroud)

如果您需要使用 createUserWithEmailAndPassword 函数

createUserWithEmailAndPassword(auth, email, password)
Run Code Online (Sandbox Code Playgroud)

你可以查看官方文档了解更多

https://www.npmjs.com/package/firebase