Ответ 1
Хорошо, исправил это, удалив мой каталог node_modules
и переустановив все.
Также я импортирую firebase так:
import firebase from 'firebase'
require('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.
Хорошо, исправил это, удалив мой каталог node_modules
и переустановив все.
Также я импортирую firebase так:
import firebase from 'firebase'
require('firebase/auth')
Я не знаю.
¯\_(ツ)_/¯
Я продолжал получать ошибку, которая сказала
"Ошибка типа: 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.
Я надеюсь, что это работает для других людей.
Я знаю, что вы отсортировали свою проблему, но нет реального ответа на оригинальную проблему.
Проблема заключалась не в 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
Надеюсь, это поможет объяснить, что было не так в первую очередь.
просто добавьте>
import firebase from '@firebase/app';
require('firebase/auth');
в ваш проект
Хотя эта проблема связана с множеством основных причин, может быть и такая простая причина.
Я забыл включить файлы 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>
Я столкнулся с этим также. Моя проблема заключалась в том, что был установлен модуль npm @firebase, а также модуль firebase. Когда в моем коде JavaScript требовалась firebase с помощью 'require ("firebase"), вместо этого веб-пакет почему-то связывал @firebase.
@firebase по умолчанию не включает в себя аутентификацию, базу данных и т.д., она модульная, поэтому вы можете запрашивать их отдельно. Следовательно, я получил вышеупомянутую ошибку, когда попытался вызвать auth().
Чтобы исправить это, вы можете удалить @firebase... или просто добавить полный путь к правильной базе, когда вам это нужно, например:
требуется ( '/путь/к /node_modules/firebase/firebase.js)
Была такая же проблема, я думаю это из-за проблем версий. Я node_modules
это, удаляя node_modules
и все сгенерированные webpack
вещи и беру версии отсюда.
Кстати, я думаю, что это очень странное поведение, потому что оно должно работать как в официальной документации.
Что-вверх. Я столкнулся с этим, работая с Уильямом Кэндилоном, добавившим учебник по 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'?
Во всяком случае - это был бы мой совет. Получите это работает на высшем уровне сначала. Затем добавьте учетные данные в отдельный файл. Это и "Не пей лагер. Он раздувает тебя, а МПА бесконечно приятнее".
Когда я работаю в 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()
У меня была такая же проблема с добавлением firebaseui. Некоторое время он работал нормально и внезапно прекратил работать без всякой причины.
Эта проблема случалась со мной несколько раз в прошлом (когда я пытался обновить или установить мои node_modules). Я буквально все перепробовал выше. Казалось, что он случайно начал работать, и я не смог использовать ранее документированное решение в следующий раз, когда произошла ошибка.
Я думаю, что у меня могли быть некоторые проблемы переноса, так как я начал использовать Firebase в первые дни, когда были некоторые странные хаки, которые я делал в macOS, чтобы заставить firebase работать правильно.
Это решение в основном полностью удаляет любые следы узла /npm/nvm с вашего Mac и переустанавливает его, чтобы использовать точную версию узла, на котором работает firebase. При этом используется nvm, поэтому, если у вас есть другие проекты, требующие разных версий узлов, вы можете переключаться между версиями узлов на лету.
В папке вашего проекта удалите все node_modules
вас папки node_modules
.
Это учебник, который я использовал для удаления узла вручную. В первые дни я помню, что мне нужно было что-то изменить, чтобы установить узел в другой каталог (из-за проблем с разрешениями), поэтому я также провел дополнительный поиск на моем компьютере, чтобы удалить эти файлы и папки из других областей.
Это урок, который я использовал, чтобы убедиться, что я удалил следы npm
Это учебник, который я использовал, чтобы вручную удалить NVM
После удаления всего и перезапуска bash (или перезапуска вашего Mac, как я это сделал для безопасности) - набрав в консоли node
, npm
и nvm
нужно просто вернуть command not found
.
NVM позволяет установить конкретную версию узла. Так как я использую среду выполнения узла 8 firebase-functions (бета), я установил их целевую версию, указанную в списке узла 8 (на данный момент, узел 8.11.1). Это все еще в бета-версии, функции firebase используют узел 6.11.5 на момент написания этой статьи.
Инструкция по установке узла, npm с использованием nvm
NVM установил более старую версию npm. Эта команда обновляет NPM до последней версии.
npm install [email protected] -g
На всякий случай перезапустите приложение терминала, затем вернитесь в папку проекта и выполните команду npm install
.
Если вы используете веб-пакет, пересоберите свой проект. Затем разверните или обслуживайте на месте.
Этот процесс решил проблему для меня. Надеюсь, это сработает для вас, и вам не нужно будет ничего взламывать. Кажется, все, что мне нужно было сделать, это немного помыться.
https://github.com/firebase/firebase-js-sdk/issues/1240#issuecomment-424311527
нашел решение здесь, в основном то же решение, упомянутое другими
кажется, что это из-за несоответствия версий
удалить package-lock.json и узлы модулей, переустановить
Я проверил, это исправило мою проблему
Мне не нужно было удалять мою папку node_modules. Просто подтвердите, есть ли у вас подпапки '@firebase' и 'firebase' внутри node_mudules. Если вы это сделаете, измените путь на 'firebase' в вашем операторе require на './Node_modules/firebase'
и сделать следующую строку; требуется ( './node_modules/firebase/firebase-авт');
У меня была та же проблема, и я решил ее следующим образом:
<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'