Firebase.auth не является функцией

Я использую Webpack с firebase и firebase-admin.

Чтобы установить 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: ƒ, …}

Как я могу получить auth() в качестве функции с помощью webpack?

Спасибо.

Изменить: Это не дубликат вопроса в комментарии. Этот вопрос относится к методу, который является членом службы auth, а не самой службе auth.

Ответ 1

Хорошо, исправил это, удалив мой каталог node_modules и переустановив все.

Также я импортирую firebase так:

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

Я не знаю.

¯\_(ツ)_/¯

Ответ 2

Я продолжал получать ошибку, которая сказала

"Ошибка типа: 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

Я удалил папку 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.

Я надеюсь, что это работает для других людей.

Вы можете прочитать больше об этом здесь

Ответ 3

Я знаю, что вы отсортировали свою проблему, но нет реального ответа на оригинальную проблему. Проблема заключалась не в 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

Надеюсь, это поможет объяснить, что было не так в первую очередь.

Ответ 4

просто добавьте>

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

в ваш проект

Ответ 5

Хотя эта проблема связана с множеством основных причин, может быть и такая простая причина.

Я забыл включить файлы 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>

Ответ 6

Я столкнулся с этим также. Моя проблема заключалась в том, что был установлен модуль npm @firebase, а также модуль firebase. Когда в моем коде JavaScript требовалась firebase с помощью 'require ("firebase"), вместо этого веб-пакет почему-то связывал @firebase.

@firebase по умолчанию не включает в себя аутентификацию, базу данных и т.д., она модульная, поэтому вы можете запрашивать их отдельно. Следовательно, я получил вышеупомянутую ошибку, когда попытался вызвать auth().

Чтобы исправить это, вы можете удалить @firebase... или просто добавить полный путь к правильной базе, когда вам это нужно, например:

требуется ( '/путь/к /node_modules/firebase/firebase.js)

Ответ 7

Была такая же проблема, я думаю это из-за проблем версий. Я node_modules это, удаляя node_modules и все сгенерированные webpack вещи и беру версии отсюда.
Кстати, я думаю, что это очень странное поведение, потому что оно должно работать как в официальной документации.

Ответ 8

Что-вверх. Я столкнулся с этим, работая с Уильямом Кэндилоном, добавившим учебник по Firebase To Reative Native...

Мысли: в Firebase есть что любить. Но импорт/экспорт, называемый vs default и версионированием, кажется, приносит многим людям ненужную душевную боль. <- Я говорю это со слезами, текущими по моему лицу и дырой в моем сердце, где любовь к мобильной разработке и несчастному детству существовала всего несколько часов назад.

Проще говоря: у меня была firebase.auth is not a function. Пошёл на поиски, хотя node_modules, удалил, перепроверил, прочитал блоги, попытался импортировать как названный, то по умолчанию, требуя отдельных модулей а-ля require('firebase/auth'); при импорте по умолчанию самого firebase и т.д. и т.д. (это действительно не должно быть так сложно). Кроме того, почему у Google нет реагирующей документации? Это 2018. Люди всерьез по-прежнему размещают теги HTML-сценариев в своем интерфейсе?

Текущее решение => в конце я вытащил весь свой конфиг и firebase.initializeApp(config) в мой app.js. Позже мне нужно будет найти время, чтобы понять, почему модуль auth "@firebase" не может быть импортирован. Или почему это даже там? Мне это нужно? Почему все это не упаковано в модуль 'yarn add firebase'?

Во всяком случае - это был бы мой совет. Получите это работает на высшем уровне сначала. Затем добавьте учетные данные в отдельный файл. Это и "Не пей лагер. Он раздувает тебя, а МПА бесконечно приятнее".

Ответ 9

Когда я работаю в Node и нуждаюсь в firebase и firebase-admin это работает для меня:

Сначала установите firebase а затем firebase-admin в указанном порядке.

Тогда используйте так:

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()

Ответ 10

У меня была такая же проблема с добавлением firebaseui. Некоторое время он работал нормально и внезапно прекратил работать без всякой причины.

Ответ 11

Мое решение: полностью удалить Node, NPM, NVM и переустановить

Эта проблема случалась со мной несколько раз в прошлом (когда я пытался обновить или установить мои node_modules). Я буквально все перепробовал выше. Казалось, что он случайно начал работать, и я не смог использовать ранее документированное решение в следующий раз, когда произошла ошибка.

Я думаю, что у меня могли быть некоторые проблемы переноса, так как я начал использовать Firebase в первые дни, когда были некоторые странные хаки, которые я делал в macOS, чтобы заставить firebase работать правильно.

Это решение в основном полностью удаляет любые следы узла /npm/nvm с вашего Mac и переустанавливает его, чтобы использовать точную версию узла, на котором работает firebase. При этом используется nvm, поэтому, если у вас есть другие проекты, требующие разных версий узлов, вы можете переключаться между версиями узлов на лету.

1. Удалить существующие узлы

В папке вашего проекта удалите все node_modules вас папки node_modules.

2. Удалить узел

Это учебник, который я использовал для удаления узла вручную. В первые дни я помню, что мне нужно было что-то изменить, чтобы установить узел в другой каталог (из-за проблем с разрешениями), поэтому я также провел дополнительный поиск на моем компьютере, чтобы удалить эти файлы и папки из других областей.

3. Удалить NPM

Это урок, который я использовал, чтобы убедиться, что я удалил следы npm

4. Удалить NVM

Это учебник, который я использовал, чтобы вручную удалить NVM

5. Перезагрузите

После удаления всего и перезапуска bash (или перезапуска вашего Mac, как я это сделал для безопасности) - набрав в консоли node, npm и nvm нужно просто вернуть command not found.

6. Переустановите узел, NPM, используя только NVM

NVM позволяет установить конкретную версию узла. Так как я использую среду выполнения узла 8 firebase-functions (бета), я установил их целевую версию, указанную в списке узла 8 (на данный момент, узел 8.11.1). Это все еще в бета-версии, функции firebase используют узел 6.11.5 на момент написания этой статьи.

Инструкция по установке узла, npm с использованием nvm

7. Обновите NPM вручную

NVM установил более старую версию npm. Эта команда обновляет NPM до последней версии.

npm install [email protected] -g

8. Установите свои модули

На всякий случай перезапустите приложение терминала, затем вернитесь в папку проекта и выполните команду npm install.

9. Перестройка и Развертывание

Если вы используете веб-пакет, пересоберите свой проект. Затем разверните или обслуживайте на месте.

Этот процесс решил проблему для меня. Надеюсь, это сработает для вас, и вам не нужно будет ничего взламывать. Кажется, все, что мне нужно было сделать, это немного помыться.

Ответ 12

https://github.com/firebase/firebase-js-sdk/issues/1240#issuecomment-424311527

нашел решение здесь, в основном то же решение, упомянутое другими

кажется, что это из-за несоответствия версий

удалить package-lock.json и узлы модулей, переустановить

Я проверил, это исправило мою проблему

Ответ 13

Мне не нужно было удалять мою папку node_modules. Просто подтвердите, есть ли у вас подпапки '@firebase' и 'firebase' внутри node_mudules. Если вы это сделаете, измените путь на 'firebase' в вашем операторе require на './Node_modules/firebase'

и сделать следующую строку; требуется ( './node_modules/firebase/firebase-авт');

Ответ 14

У меня была та же проблема, и я решил ее следующим образом:

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

Вы заметили, что им нужно:

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

и инициализировать функцию

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