signinwithemailandpassword - javascript firebase tutorial
firebase.auth no es una función (8)
Mi solución: eliminar completamente el nodo, NPM, NVM y reinstalar
Este problema me ha ocurrido varias veces en el pasado (siempre que intenté actualizar o instalar mis node_modules). Literalmente intenté todo lo de arriba. Parece que siempre comenzó a funcionar al azar y no pude usar ninguna solución documentada previamente la próxima vez que ocurrió el error.
Creo que es posible que haya tenido algunos problemas de transferencia desde que comencé a usar Firebase en los primeros días, cuando hubo algunos trucos extraños que hice en macOS para que Firebase funcionara correctamente.
Básicamente, esta solución elimina completamente cualquier rastro de node / npm / nvm de su Mac y lo vuelve a instalar para usar la versión exacta del nodo que ejecuta firebase. Esto utiliza nvm, por lo que si tiene otros proyectos que requieren diferentes versiones de nodo, puede cambiar entre las versiones de nodo sobre la marcha.
1. Eliminar módulos de nodo existentes
En la carpeta de su proyecto, elimine todas las carpetas de node_modules
que tenga.
2. Eliminar Nodo
Este es el tutorial que utilicé para eliminar manualmente el nodo . En los primeros días, recuerdo que tuve que cambiar algo para instalar el nodo en un directorio diferente (debido a problemas de permisos), así que también realicé búsquedas adicionales en mi computadora para eliminar estos archivos y carpetas de otras áreas.
3. Eliminar NPM
Este es el tutorial que usé para asegurarme de que eliminé rastros de npm
4. Eliminar NVM
Este es el tutorial que usé para eliminar manualmente NVM
5. Reiniciar
Después de eliminar todo y reiniciar bash (o reiniciar su Mac como lo hice por seguridad): escribir el node
, npm
y nvm
en la consola simplemente debería devolver el command not found
.
6. Vuelva a instalar el nodo, NPM usando NVM solamente
NVM le permite instalar una versión específica del nodo. Como uso el tiempo de ejecución del nodo 8 de las funciones de base de fuego (beta), instalé su versión de destino del nodo 8 que figura en la lista (a partir de ahora, nodo 8.11.1 ). Esto aún está en versión beta, las funciones de firebase usan el nodo 6.11.5 en el momento de esta escritura.
Instrucciones para instalar el nodo, npm usando nvm
7. Actualizar NPM manualmente
NVM instaló una versión anterior de npm. Este comando actualiza NPM a su última versión.
npm install npm@latest -g
8. Instale sus módulos
Reinicie su aplicación de terminal por si acaso, luego regrese a la carpeta de su proyecto y ejecute el comando npm install
.
9. Re-construir y Re-Implementar
Si está utilizando un paquete web, vuelva a construir su proyecto. Luego despliega o sirve localmente.
Este proceso resolvió el problema para mí. Esperemos que funcione para ti y no tengas que hacer ningún truco. Parece que todo lo que necesitaba hacer era un poco de limpieza.
Estoy usando Webpack con firebase y firebase-admin.
Para instalar firebase corri
npm install --save firebase
Estoy importando base de fuego usando
import * as firebase from ''firebase/app''
import ''firebase/auth''
Yo tambien lo intenté
import * as firebase from ''firebase''
Y lo intenté
const firebase = require(''firebase'')
Como se sugiere en la guía de inicio de la web.
Cuando intento usar firebase.auth()
sin embargo, firebase.auth()
un error
console.js: 32 TypeError: firebase.auth no es una función
Cuando uso el depurador para inspeccionar firebase
, veo que, de hecho, no tiene una función de auth
:
> firebase
{__esModule: true, initializeApp: ƒ, app: ƒ, Promise: ƒ, …}
¿Cómo puedo obtener auth () incluido como una función utilizando webpack?
Gracias.
Editar: Esto no es un duplicado de la pregunta en el comentario. Esa pregunta se refiere a un método que es miembro del servicio de autenticación, no al servicio de autenticación en sí.
Me encontré con esto también. Mi problema fue el módulo npm @firebase que se instaló, así como el módulo firebase. Cuando solicité firebase en mi código JavaScript con ''require ("firebase")'', webpack empaquetó @firebase por alguna razón.
@firebase no incluye autenticación, base de datos, etc. de forma predeterminada ... es modular, por lo que puede solicitarlos por separado. En consecuencia, recibí el error anterior cuando intenté llamar a auth ().
Para solucionarlo, puede eliminar @firebase ... o simplemente agregar la ruta completa a la base de fuego correcta cuando lo necesite, como
require (''/ path / to / node_modules / firebase / firebase.js'')
Ok, solucionado esto borrando mi directorio node_modules
y reinstalando todo.
También estoy importando firebase así:
import firebase from ''firebase''
require(''firebase/auth'')
No lo sé.
¯/_(ツ)_/¯
Que pasa. Me encontré con esto mientras trabajaba en el tutorial Adding Firebase to React Native de William Candillon ...
Pensamientos: Hay mucho que amar sobre Firebase. Pero la importación / exportación, llamada vs por defecto y la versión parece traer a mucha gente un dolor de corazón innecesario. <- Digo eso con lágrimas corriendo por mi cara y un agujero en mi corazón donde el amor por el desarrollo móvil y la infeliz infancia solían existir hace apenas unas horas.
En pocas palabras: tuve base de firebase.auth is not a function
. Fui a buscar en node_modules, se eliminaron, se re-hilaron, se leyeron los blogs, se intentó importar como se nombró y luego por defecto, requiriendo módulos separados a-la require(''firebase/auth'');
bajo la importación predeterminada de Firebase en sí, etc., etc. (no debería ser tan difícil). Además, ¿por qué Google no tiene la documentación de reacción? Es 2018. ¿La gente todavía está poniendo seriamente etiquetas de script HTML en su parte frontal?
Solución actual => al final, puse todos mis config y firebase.initializeApp(config)
en mi nivel superior app.js. Tendré que encontrar tiempo más tarde para averiguar por qué no se puede importar el módulo "@firebase" de auth. ¿O por qué eso es incluso allí? ¿Lo necesito? ¿Por qué no está todo envuelto en el módulo ''hilo agregar base de fuego''?
De todos modos, ese sería mi consejo. Haz que funcione primero en el nivel superior. Luego, separe las credenciales en un archivo separado más adelante. Eso y "No bebas cerveza. Infla y la IPA es infinitamente más agradable".
Sé que has solucionado tu problema, pero no hay una respuesta real al problema original. El problema no era con los node_modules
, sino con la forma en que importaba el componente.
Cuando exporta un componente ES6 de la forma en que normalmente export default () => { console.log(''default component export''); };
export default () => { console.log(''default component export''); };
la palabra clave default
es aquí, cuando importa un componente ES6 de manera similar a la import firebase from ''firebase''
, está tomando la propiedad default
del objeto exportado.
Teniendo en cuenta el ejemplo anterior, esto es lo que has hecho mal.
Utilizando ES6:
import * as firebase from ''firebase''
console.log(firebase.auth) // Undefined
console.log(firebase.default.auth) // Function
Utilizando ES5:
var firebase = require(''firebase'')
console.log(firebase.auth) // Undefined
console.log(firebase.default.auth) // Function
Tenga en cuenta el .default
Espero que esto ayude a explicar lo que estaba mal en primer lugar.
Seguí recibiendo un error que decía
"TypeError: firebase.auth no es una función"
Conseguí que apareciera el objeto de autenticación y lo que hice de manera diferente fue instalar los módulos en un orden diferente.
La primera vez que instalé los módulos (esto es cuando el objeto de autenticación no estaba apareciendo):
// this seems to confuse things with the auth object when installed in this order
$ npm install firebase-admin --save
$ npm install firebase --save
Borré la carpeta npm y comencé desde cero, aunque esta vez cambié el orden de instalación:
// for some reason this worked and now I can access the auth object
$ npm install firebase --save
$ npm install firebase-admin --save
No hice nada más. Simplemente invirtí el orden de instalación instalando primero firebase y luego firebase-admin.
Espero que esto funcione para otras personas.
Tenía el mismo problema, creo que es por problemas con las versiones. Lo webpack
eliminando node_modules
y todas las cosas generadas por webpack
y tomo versiones desde here .
Por cierto, creo que es un comportamiento muy extraño, porque debería funcionar como en la documentación oficial.
solo agrega>
import firebase from ''@firebase/app'';
require(''firebase/auth'');
en tu proyecto