wake-up-neo.com

firebase.auth ist keine Funktion

Ich verwende Webpack mit Firebase und Firebase-Admin.

Zur Installation von Firebase lief ich

npm install --save firebase

Ich importiere Firebase mit,

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

Ich habe es auch versucht

import * as firebase from 'firebase'

Und ich habe es versucht

const firebase = require('firebase')

Wie in Web vorgeschlagen - Leitfaden

Wenn ich versuche, firebase.auth() zu verwenden, erhalte ich jedoch eine Fehlermeldung

console.js: 32 TypeError: firebase.auth ist keine Funktion

Wenn ich den Debugger zum Überprüfen von firebase verwende, sehe ich, dass er tatsächlich keine auth-Funktion hat:

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

Wie kann ich auth () mit Webpack als Funktion einschließen?

Vielen Dank.

Edit: Dies ist nicht ein Duplikat der Frage im Kommentar. Diese Frage bezieht sich auf eine Methode, die Mitglied des Auth-Service ist, nicht auf den Auth-Service selbst.

21
Eric Conner

Ok, das Problem wurde behoben, indem mein node_modules-Verzeichnis gelöscht und alles neu installiert wurde.

Ich importiere auch Firebase so:

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

Ich weiß es nicht.

¯\_(ツ)_/¯
25
Eric Conner

Ich weiß, dass Sie Ihr Problem gelöst haben, aber es gibt keine echte Antwort auf das ursprüngliche Problem ... Das Problem lag nicht beim node_modules, sondern beim Importieren der Komponente.

Wenn Sie eine Komponente ES6 wie üblich exportieren, export default () => { console.log('default component export'); };

default ist das Schlüsselwort hier. Wenn Sie eine ES6-Komponente einer Komponente wie import firebase from 'firebase' importieren, übernimmt sie die default-Eigenschaft des exportierten Objekts.

Wenn Sie das obige Beispiel berücksichtigen, haben Sie Folgendes falsch gemacht.

Mit ES6:

import * as firebase from 'firebase'

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

Mit ES5:

var firebase = require('firebase')

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

Beachten Sie den .default

Ich hoffe, dies hilft zu erklären, was überhaupt nicht stimmte.

12
Joao Lopes

Ich habe immer eine Fehlermeldung bekommen

"TypeError: firebase.auth ist keine Funktion"

Ich bekam das Auth-Objekt zum Anzeigen, und die Sache, die ich anders gemacht habe, war die Installation der Module in einer anderen Reihenfolge.

Bei der ersten Installation der Module wurde das Auth-Objekt nicht angezeigt.

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

Ich habe den npm-Ordner gelöscht und von vorne angefangen, obwohl ich diesmal die Installationsreihenfolge umgekehrt habe:

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

Ich habe sonst nichts gemacht. Ich habe einfach die Installationsreihenfolge umgekehrt, indem ich zuerst firebase und dann firebase-admin installiert habe.

Ich hoffe, das funktioniert für andere Leute.

Sie können hier mehr darüber lesen

8
Lance Samaria

einfach hinzufügen>

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

in dein Projekt

Obwohl es viele Ursachen für dieses Problem gibt, könnte auch eine einfache wie diese der Fall sein.

Ich habe vergessen, die js-Dateien für auth und db einzuschließen, obwohl ich sie im JS-Code verwende.

Vor dem Update;

<!-- 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>

Nach dem Update;

<!-- 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>
3
Gayan Pathirage

Ich bin auch darauf gestoßen. Mein Problem war, dass das npm-Modul @firebase sowie das Firebase-Modul installiert wurden. Wenn ich in meinem JavaScript-Code eine Firebase mit "required (" Firebase ") benötigte, wurde das Webpack aus einem bestimmten Grund mit @firebase gebündelt. 

@firebase enthält standardmäßig nicht auth, database etc. ... es ist modular, sodass Sie sie separat anfordern können. Ich habe daher den obigen Fehler erhalten, als ich versucht habe, auth () aufzurufen. 

Um dies zu beheben, können Sie @firebase entfernen ... oder einfach den vollständigen Pfad zur korrekten Firebase hinzufügen, wenn Sie ihn benötigen 

erfordern ("/ path/to/node_modules/firebase/firebase.js")

2
Troy

Hatte das gleiche Problem, ich glaube es liegt an Versionsproblemen ... Ich löse es, indem ich node_modules und alle webpack generierten Sachen lösche und Versionen von hier nehme.
Übrigens, ich denke, es ist sehr merkwürdiges Verhalten, weil es wie in der offiziellen Dokumentation funktionieren sollte. 

2
CenyGG

Was geht. Ich bin auf dieses Problem gestoßen, als ich durch William Candillons Adding Firebase To React Native Tutorial ...

Gedanken: Es gibt viel zu lieben über Firebase. Aber der Import/Export, genannt vs default und versioning, scheint vielen Leuten unnötig viel Herz zu bereiten. <- Ich sage das mit Tränen über mein Gesicht und einem Loch in meinem Herzen, wo die Liebe zu mobiler Entwicklung und unglücklicher Kindheit vor Stunden existierte.

Vereinfacht gesagt: Ich hatte firebase.auth is not a function. Ich ging durch, weil node_modules gelöscht, erneut garniert, Blogs gelesen, versucht wurde, den Namen als Standardwert zu importieren, und erforderte separate Module a-la require('firebase/auth'); unter dem Standardimport von firebase selbst usw. usw (Es sollte wirklich nicht so schwer sein). Warum hat Google auch keine Dokumentation für die Reaktion? Es ist 2018. Setzen die Leute noch ernsthaft HTML-Skript-Tags in ihr Frontend?

Aktuelle Lösung => am Ende habe ich alle meine config und firebase.initializeApp(config) in meine oberste app.js. Ich muss später Zeit finden, um herauszufinden, warum das "@firebase" -Modul von auth nicht importiert werden kann. Oder warum ist das überhaupt da? Brauche ich das? Warum ist das nicht alles im Modul "Garne hinzufügen"?

Wie auch immer - das wäre mein Rat. Lassen Sie es zuerst auf höchster Ebene arbeiten. Hive-off die Anmeldeinformationen später in eine separate Datei. Das und "Nicht Bier trinken. Es bläst dich auf und IPA ist unendlich viel schöner." ?????????????

1
NewbieAid

Ich musste meinen node_modules-Ordner nicht löschen. Bestätigen Sie einfach, ob in node_mudules die Unterordner '@firebase' und 'firebase' vorhanden sind. Wenn Sie dies tun, ändern Sie den Pfad zu "firebase" in Ihrer require-Anweisung zu "./node_modules/firebase".

und mach die nächste Zeile; require ('./ node_modules/firebase/firebase-auth');

0
Treasure

Ich hatte das gleiche Problem und löste es so:

<script src = "https://www.gstatic.com/firebasejs/6.5.0/firebase-app.js"> </script>
<script src = "https://www.gstatic.com/firebasejs/6.5.0/firebase-auth.js"> </script>
<script>
// Firebase settings of your web application
var firebaseConfig = {
apiKey: "your apikey",
authDomain: "hackatonteleton.firebaseapp.com",
databaseURL: "https://name-database.firebaseio.com",
projectId: "name-projectid",
storageBucket: "name.appspot.com",
messagingSenderId: "730018138942",
Application ID: "1: 730018138942: web: eb12fac2f91fb17f"
};
// Initialize Firebase
firebase.initializeApp (firebaseConfig);
const auth = firebase.auth ();
</script>

Der Unterschied, den Sie bemerken, ist, dass sie Folgendes benötigen:

<script src = "https://www.gstatic.com/firebasejs/6.5.0/firebase-auth.js"> </script>

und initialisieren Sie die Funktion

const auth = firebase.auth ();`enter code here`

Meine Lösung: Entfernen Sie Knoten, NPM, NVM und Neuinstallation vollständig

Dieses Problem ist mir in der Vergangenheit schon ein paar Mal passiert (immer wenn ich versuche, meine node_modules zu aktualisieren oder zu installieren). Ich habe alles oben buchstäblich ausprobiert. Es schien immer zufällig zu funktionieren, und ich konnte beim nächsten Auftreten des Fehlers keine zuvor dokumentierte Lösung verwenden.

Ich glaube, ich hatte einige Probleme mit der Verschleppung, seit ich mit Firebase angefangen habe, als ich in macOS einige seltsame Hacks gemacht habe, um Firebase richtig zum Laufen zu bringen.

Diese Lösung entfernt grundsätzlich alle Spuren von Node/npm/nvm von Ihrem Mac und installiert sie erneut, um die genaue Version des Knotens zu verwenden, auf dem Firebase ausgeführt wird. Dies verwendet nvm. Wenn Sie also andere Projekte haben, für die unterschiedliche Knotenversionen erforderlich sind, können Sie sofort zwischen den Knotenversionen wechseln. 

1. Löschen Sie vorhandene Knotenmodule

Löschen Sie im Ordner Ihres Projekts alle node_modules-Ordner, die Sie haben.

2. Entfernen Sie den Knoten

Dies ist das Tutorial, mit dem ich Knoten manuell entfernt habe . In den frühen Tagen erinnere ich mich, dass ich etwas ändern musste, um Knoten in ein anderes Verzeichnis zu installieren (aufgrund von Berechtigungsproblemen). Deswegen habe ich auf meinem Computer zusätzliche Suchvorgänge durchgeführt, um diese Dateien und Ordner aus anderen Bereichen zu entfernen.

3. NPM entfernen

Dies ist das Tutorial, das ich verwendet habe, um sicherzustellen, dass ich Spuren von npm entfernt habe.

4. Entfernen Sie den NVM

Dies ist das Tutorial, mit dem ich NVM manuell entfernt habe.

5. Starten Sie neu

Nachdem Sie alles entfernt und bash neu gestartet haben (oder Ihren Mac neu gestartet haben, wie ich es aus Sicherheitsgründen getan habe), geben Sie node, npm und nvm in die Konsole ein. Geben Sie einfach command not found zurück. 

6. Installieren Sie den Knoten, NPM nur mit NVM neu

Mit NVM können Sie eine bestimmte Version des Knotens installieren. Da ich die Firebase-Funktionen node 8 Laufzeit (Beta) verwende, installierte ich ihre aufgelistete Zielversion von Knoten 8. (ab sofort Knoten 8.11.1 ). Dies ist noch in der Beta-Phase. Firebase-Funktionen verwenden zum Zeitpunkt dieses Schreibens den Knoten 6.11.5. 

Anweisungen zum Installieren des Knotens, npm mit nvm

7. Aktualisieren Sie den NPM manuell

NVM hat eine ältere Version von npm installiert. Dieser Befehl aktualisiert NPM auf die neueste Version.

npm install [email protected] -g

8. Installieren Sie Ihre Module

Starten Sie Ihre Terminal-App nur für den Fall neu, kehren Sie dann zu Ihrem Projektordner zurück und führen Sie den Befehl npm install aus.

9. Erstellen Sie erneut und stellen Sie sie erneut bereit

Wenn Sie Webpack verwenden, erstellen Sie ein neues Projekt. Dann lokal implementieren oder bereitstellen.

Dieser Prozess hat das Problem für mich gelöst. Hoffentlich funktioniert es für Sie und Sie müssen keine Hack-Sachen machen. Alles was ich brauchte, war ein bisschen aufzuräumen.

0
Matthew Rideout

Wenn Sie Node und sowohl firebase als auch firebase-admin Benötigen, funktioniert dies für mich:

Installieren Sie zuerst firebase und dann firebase-admin In dieser Reihenfolge.

Dann benutze wie folgt:

const app = require('@firebase/app');
require('@firebase/auth');
require('@firebase/firestore');

const firebase = app.firebase

firebase.initializeApp({…})

const auth = firebase.auth()
const db = firebase.firestore()
0
Gerardlamo