Estoy un poco confundido tratando de usar geofire-common en el código del navegador.
Al principio, hice un intento exitoso con NodeJS que usa geofire-common que se hace referenciaaquí en la documentación de Google y cuyo código se ve así:
import { createRequire } from 'module'; // <------ trick to get a require function const require = createRequire(import.meta.url); const { initializeApp, cert } = require('firebase-admin/app'); const { getFirestore } = require('firebase-admin/firestore'); const serviceAccount = require('./serviceAccountKey.json'); initializeApp({ credential: cert(serviceAccount), }); const db = getFirestore(); const geofire = require('geofire-common'); //<---------- geofire-commonEntonces, quería hacer que esto funcionara desde el lado del navegador... y me topé con este ejemplo . En este ejemplo, puedo ver una función 'requerir', así que supongo que tiene algo que ver con el módulo commonJS de la vieja escuela:
const geofire = require('geofire-common'); Require no es parte de la API de JavaScript estándar y debe ser específico de NodeJS (lo cual es un poco extraño porque pensé que el ejemplo era el código del navegador), así que intenté usar una importación de ES6.
import {geofire} from 'geofire-common';... sin éxito :
The requested module '/node_modules/.vite/geofire-common.js?v=738ba8db' does not provide an export named 'geofire' Si algunos de los expertos en JS estuvieran dispuestos a arrojar algo de luz sobre esos 2 paquetes y ayudarme a importar geofire correctamente si es posible, sería muy apreciado.
creo que puedes usar
import * as geofire from 'geofire-common';Esa es una pregunta muy interesante, una vez que me metí en ella, fue un poco confuso, ya que las importaciones utilizadas en JavaScript han cambiado, y hay algunas diferencias según el caso de uso.
Primero, necesitamos saber de dónde viene este módulo Geofire; mencionó la documentación y el ejemplo donde podemos ver que usan la línea de comando para instalar esta biblioteca:
// Install from NPM. If you prefer to use a static .js file visit // https://github.com/firebase/geofire-js/releases and download // geofire-common.min.js from the latest version npm install --save geofire-common
Como puede ver, están usando NPM, lo que nos indica que se trata de una biblioteca de nodejs . Esto es importante porque estaba confundido sobre el origen y si era un módulo commonjs, que parece ser. Esto también significa que debe llamarse usando require , una función y también esta causa no funciona cuando se usa import , que solo se puede usar para el estilo de módulos ES, como se cita en la documentación del nodo :
requireEl módulo CommonJS
requiresiempre trata los archivos a los que hace referencia como CommonJS.No se admite el uso de
requirepara cargar un módulo ES porque los módulos ES tienen una ejecución asíncrona. En su lugar, useimport()para cargar un módulo ES desde un módulo CommonJS.
Luego preguntó cómo ejecutar este código en el lado del navegador, lo que creo que se puede hacer usando la referencia HTML o descargando el archivo js como se sugiere en el repositorio de github .
Alternativamente, puede incluir GeoFire en su HTML. Para hacerlo, descargue una versión minificada o no minificada de GeoFire desde la página de lanzamientos de este repositorio de GitHub . Luego, impleméntalo en Hosting en tu proyecto de Firebase.
<!-- Firebase --> <script src="https://www.gstatic.com/firebasejs/8.0.1/firebase-app.js"></script> <script src="https://www.gstatic.com/firebasejs/8.0.1/firebase-database.js"></script> <!-- GeoFire (TODO: substitute in your own project id)--> <script src="https://my-firebase-project.web.app/geofire-5.0.1.min.js"></script>
También me referiría a la referencia de API para obtener más orientación, puedo ver algunas diferencias sobre cómo usar la biblioteca entre la página de firebase y la referencia de API.
Finalmente, en la página de npm podemos ver geofire como dependiente de geofire-common , y ambos tienen el mismo repositorio de github, así que supongo que tiene algo más que ver con el nombre. Yo diría que ambos son básicamente lo mismo.