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)
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第二个来反转安装顺序.
我希望这适用于其他人.
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
希望这有助于解释首先出现的问题.
小智 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
虽然这个问题背后有很多根本原因,但也可能是这样一个简单的原因。
尽管我在 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)
那么它应该可以正常工作
这是来自官方文档的导入声明:
// 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)
进入您的项目
小智 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