Informazioni su Firebase per il web

Durante lo sviluppo di un'app web utilizzando Firebase, potresti incontrare concetti non familiari o aree in cui hai bisogno di maggiori informazioni per prendere le decisioni giuste per il tuo progetto. Lo scopo di questa pagina è rispondere a queste domande o indirizzarti alle risorse per saperne di più.

Se hai domande su un argomento non trattato in questa pagina, visita una delle nostre community online. Inoltre, aggiorneremo periodicamente questa pagina con nuovi argomenti, quindi ricontrolla per vedere se abbiamo aggiunto l'argomento su cui desideri saperne di più.

Versioni dell'SDK: con nome e modulari

Firebase offre due piattaforme API per le app web:

  • JavaScript - con nome spazio. Questa è l'interfaccia JavaScript che Firebase ha gestito per molti anni e che è nota agli sviluppatori web con app Firebase meno recenti. Poiché l'API con nome non beneficia del supporto continuo delle nuove funzionalità, la maggior parte delle nuove app dovrebbe adottare l'API modulare.
  • JavaScript - modulare. Questo SDK si basa su un approccio modulare che consente di ridurre le dimensioni dell'SDK e di aumentare l'efficienza con gli strumenti di compilazione JavaScript moderni come webpack o Rollup.

L'API modulare si integra bene con gli strumenti di creazione che rimuovono il codice non utilizzato nella tua app, un processo noto come "tree-shaking". Le app create con questo SDK beneficiano di un'impronta di dimensioni notevolmente ridotta. L'API con spazio dei nomi, sebbene disponibile come modulo, non ha una struttura strettamente modulare e non offre lo stesso grado di riduzione delle dimensioni.

Sebbene la maggior parte dell'API modulare segua gli stessi pattern dell'API con nome spazio dei nomi, l'organizzazione del codice è diversa. In genere, l'API con spazio dei nomi è orientata verso uno spazio dei nomi e un pattern di servizio, mentre l'API modulare è orientata verso funzioni discrete. Ad esempio, la catena di punti dell'API con spazio dei nomi, come firebaseApp.auth(), viene sostituita nell'API modulare da una singola funzione getAuth() che richiede firebaseApp e restituisce un'istanza Authentication.

Ciò significa che le app web create con l'API con spazio dei nomi richiedono il refactoring per poter sfruttare la progettazione delle app modulari. Per ulteriori dettagli, consulta la guida all'upgrade.

JavaScript: API modulare per nuove app

Se stai iniziando una nuova integrazione con Firebase, puoi attivare l'API modulare quando aggiungi e inizilizi l'SDK.

Durante lo sviluppo dell'app, tieni presente che il codice sarà organizzato principalmente in base alle funzioni. Nell'API modulare, i servizi vengono passati come primo argomento e la funzione utilizza i dettagli del servizio per fare il resto. Ad esempio:

import { getAuth, onAuthStateChanged } from "firebase/auth";

const auth = getAuth(firebaseApp);
onAuthStateChanged(auth, user => {
  // Check for user status
});

Per ulteriori esempi e dettagli, consulta le guide per ogni area di prodotto e la documentazione di riferimento dell'API modulare.

Metodi per aggiungere gli SDK web alla tua app

Firebase fornisce librerie JavaScript per la maggior parte dei prodotti Firebase, tra cui Remote Config, FCM e altri. Il modo in cui aggiungi gli SDK Firebase all'app web dipende dagli strumenti utilizzati con la tua app, ad esempio un bundle di moduli.

Puoi aggiungere qualsiasi libreria disponibile alla tua app tramite uno dei metodi supportati:

  • npm (per i bundler di moduli)
  • CDN (Content Delivery Network)

Per istruzioni dettagliate sulla configurazione, consulta Aggiungere Firebase all'app JavaScript. Il resto di questa sezione contiene informazioni utili per aiutarti a scegliere tra le opzioni disponibili.

npm

Scaricando il pacchetto Firebase npm (che include i bundle del browser e Node.js), otterrai una copia locale dell'SDK Firebase, che potrebbe essere necessaria per applicazioni non basate su browser come le app Node.js, React Native o Electron. Il download include i pacchetti Node.js e React Native come opzione per alcuni pacchetti. I bundle Node.js sono necessari per il passaggio del rendering lato server (SSR) dei framework SSR.

L'utilizzo di npm con un bundler di moduli come webpack o Rollup offre opzioni di ottimizzazione per "tree-shake" il codice inutilizzato e applicare polyfill mirati, che possono ridurre notevolmente le dimensioni dell'app. L'implementazione di queste funzionalità potrebbe aggiungere un po' di complessità alla configurazione e alla catena di build, ma vari strumenti CLI tradizionali possono contribuire ad attenuare il problema. Questi strumenti includono Angular, React, Vue, Next e altri.

In sintesi:

  • Fornisce una valida ottimizzazione delle dimensioni dell'app
  • Sono disponibili strumenti efficaci per gestire i moduli
  • Obbligatorio per SSR con Node.js

CDN (Content Delivery Network)

L'aggiunta di librerie archiviate nella CDN di Firebase è un semplice metodo di configurazione dell'SDK che potrebbe essere familiare a molti sviluppatori. Se utilizzi la rete CDN per aggiungere gli SDK, non avrai bisogno di uno strumento di creazione e la tua catena di build potrebbe tendere a essere più semplice e facile da utilizzare rispetto ai bundler di moduli. Se non ti preoccupi particolarmente delle dimensioni installate della tua app e non hai requisiti speciali come la transpilazione da TypeScript, la CDN potrebbe essere una buona scelta.

In sintesi:

  • Familiare e semplice
  • Appropriata quando le dimensioni dell'app non sono un problema importante
  • Opzione appropriata se il tuo sito web non utilizza strumenti di compilazione.

Varianti dell'SDK web Firebase

L'SDK web di Firebase può essere utilizzato sia in applicazioni browser sia in applicazioni Node. Tuttavia, diversi prodotti non sono disponibili negli ambienti Node. Consulta l'elenco degli ambienti supportati.

Alcuni SDK dei prodotti forniscono varianti separate di browser e nodo, ciascuna delle quali sono fornite in entrambi i formati ESM e CJS, mentre alcuni SDK di prodotto forniscono anche varianti Cordova o React Native. L'SDK web è configurato per fornire la variante corretta in base alla configurazione o all'ambiente degli strumenti e nella maggior parte dei casi non dovrebbe richiedere la selezione manuale. Tutte le varianti dell'SDK sono progettate per aiutare a creare app web o app client per l'accesso dell'utente finale, come in un'applicazione desktop Node.js o IoT. Se il tuo scopo è configurare l'accesso amministrativo da ambienti con privilegi (ad esempio i server), utilizza Firebase Admin SDK.

Rilevamento dell'ambiente con bundler e framework

Quando installi l'SDK web Firebase utilizzando npm, vengono installate entrambe le versioni JavaScript e Node.js. Il pacchetto fornisce il rilevamento dettagliato dell'ambiente per attivare i bundle giusti per la tua applicazione.

Se il codice utilizza istruzioni require Node.js, l'SDK trova il bundle specifico per Node. In caso contrario, le impostazioni del bundler devono essere definite correttamente per rilevare il campo del punto di ingresso corretto nel file package.json (ad esempio, main, browser o module). Se si verificano errori di runtime con l'SDK, assicurati che il bundler sia configurato in modo da dare la priorità al tipo di bundle corretto per il tuo ambiente.

Scopri di più sull'oggetto di configurazione di Firebase

Per inizializzare Firebase nella tua app, devi fornire la configurazione del progetto Firebase dell'app. Puoi ottenere l'oggetto di configurazione Firebase in qualsiasi momento.

  • Ti sconsigliamo di modificare manualmente l'oggetto di configurazione, in particolare le seguenti "opzioni Firebase" obbligatorie: apiKey, projectId e appID. Se inizializzi la tua app con valori non validi o mancanti per queste "opzioni Firebase obbligatorie", gli utenti della tua app potrebbero riscontrare problemi gravi. L'eccezione a questa regola è authDomain, che può essere aggiornata seguendo le best practice per l'utilizzo di signInWithReindirizzamento.

  • Se hai attivato Google Analytics nel tuo progetto Firebase, l'oggetto config contiene il campo measurementId. Scopri di più su questo campo nella pagina introduttiva di Analytics.

  • Se attivi Google Analytics o Realtime Database dopo aver creato l'app web Firebase, assicurati che l'oggetto di configurazione Firebase che utilizzi nell'app sia aggiornato con i valori di configurazione associati (rispettivamente measurementId e databaseURL). Puoi ottenere l'oggetto di configurazione Firebase in qualsiasi momento.

Di seguito è riportato il formato di un oggetto di configurazione con tutti i servizi abilitati (questi valori vengono completati automaticamente):

var firebaseConfig = {
  apiKey: "API_KEY",
  authDomain: "PROJECT_ID.firebaseapp.com",
  // The value of `databaseURL` depends on the location of the database
  databaseURL: "https://DATABASE_NAME.firebaseio.com",
  projectId: "PROJECT_ID",
  storageBucket: "PROJECT_ID.appspot.com",
  messagingSenderId: "SENDER_ID",
  appId: "APP_ID",
  // For Firebase JavaScript SDK v7.20.0 and later, `measurementId` is an optional field
  measurementId: "G-MEASUREMENT_ID",
};

Librerie disponibili

Opzioni di configurazione aggiuntive

Ritarda il caricamento degli SDK Firebase (dalla CDN)

Puoi ritardare l'inclusione degli SDK Firebase fino al caricamento dell'intera pagina. Se utilizzi script CDN API modulari con <script type="module">, questo è il comportamento predefinito. Se utilizzi script CDN con spazi dei nomi come modulo, completa questi passaggi per posticipare il caricamento:

  1. Aggiungi un flag defer a ogni tag script per gli SDK Firebase, quindi posticipa l'inizializzazione di Firebase utilizzando un secondo script, ad esempio:

    <script defer src="https://www.gstatic.com/firebasejs/8.10.1/firebase-app.js"></script>
    
    <script defer src="https://www.gstatic.com/firebasejs/8.10.1/firebase-auth.js"></script>
    <script defer src="https://www.gstatic.com/firebasejs/8.10.1/firebase-firestore.js"></script>
    
    // ...
    
    <script defer src="./init-firebase.js"></script>
    
  2. Crea un file init-firebase.js, quindi includi quanto segue nel file:

    // TODO: Replace the following with your app's Firebase project configuration
    var firebaseConfig = {
      // ...
    };
    
    // Initialize Firebase
    firebase.initializeApp(firebaseConfig);
    

Utilizzare più progetti Firebase in un'unica app

Nella maggior parte dei casi, devi solo inizializzare Firebase in un'unica app predefinita. Puoi accedere a Firebase da quell'app in due modi equivalenti:

Web

import { initializeApp } from "firebase/app";
import { getStorage } from "firebase/storage";
import { getFirestore } from "firebase/firestore";

// Initialize Firebase with a "default" Firebase project
const defaultProject = initializeApp(firebaseConfig);

console.log(defaultProject.name);  // "[DEFAULT]"

// Option 1: Access Firebase services via the defaultProject variable
let defaultStorage = getStorage(defaultProject);
let defaultFirestore = getFirestore(defaultProject);

// Option 2: Access Firebase services using shorthand notation
defaultStorage = getStorage();
defaultFirestore = getFirestore();

Web

// Initialize Firebase with a "default" Firebase project
const defaultProject = firebase.initializeApp(firebaseConfig);

console.log(defaultProject.name);  // "[DEFAULT]"

// Option 1: Access Firebase services via the defaultProject variable
let defaultStorage = defaultProject.storage();
let defaultFirestore = defaultProject.firestore();

// Option 2: Access Firebase services using shorthand notation
defaultStorage = firebase.storage();
defaultFirestore = firebase.firestore();

A volte, però, devi accedere a più progetti Firebase contemporaneamente. Ad esempio, potresti voler leggere i dati dal database di un progetto Firebase, ma memorizzare i file in un altro progetto Firebase. Oppure potresti voler autenticare un progetto e mantenere un secondo progetto non autenticato.

L'SDK Firebase JavaScript consente di inizializzare e utilizzare più progetti Firebase in una singola app contemporaneamente, utilizzando le proprie informazioni di configurazione Firebase per ogni progetto.

Web

import { initializeApp, getApp } from "firebase/app";
import { getStorage } from "firebase/storage";
import { getFirestore } from "firebase/firestore";

// Initialize Firebase with a default Firebase project
initializeApp(firebaseConfig);

// Initialize Firebase with a second Firebase project
const otherProject = initializeApp(otherProjectFirebaseConfig, "other");

console.log(getApp().name);  // "[DEFAULT]"
console.log(otherProject.name);    // "otherProject"

// Use the shorthand notation to access the default project's Firebase services
const defaultStorage = getStorage();
const defaultFirestore = getFirestore();

// Use the otherProject variable to access the second project's Firebase services
const otherStorage = getStorage(otherProject);
const otherFirestore = getFirestore(otherProject);

Web

// Initialize Firebase with a default Firebase project
firebase.initializeApp(firebaseConfig);

// Initialize Firebase with a second Firebase project
const otherProject = firebase.initializeApp(otherProjectFirebaseConfig, "other");

console.log(firebase.app().name);  // "[DEFAULT]"
console.log(otherProject.name);    // "otherProject"

// Use the shorthand notation to access the default project's Firebase services
const defaultStorage = firebase.storage();
const defaultFirestore = firebase.firestore();

// Use the otherProject variable to access the second project's Firebase services
const otherStorage = otherProject.storage();
const otherFirestore = otherProject.firestore();

Esegui un server web locale per lo sviluppo

Se stai creando un'app web, alcune parti dell'SDK JavaScript Firebase richiedono di pubblicare l'app web da un server anziché dal file system locale. Puoi utilizzare l'interfaccia a riga di comando Firebase per eseguire un server locale.

Se hai già configurato Firebase Hosting per la tua app, potresti aver già completato diversi dei passaggi riportati di seguito.

Per pubblicare l'app web, utilizzerai l'interfaccia a riga di comando Firebase.

  1. Consulta la documentazione dell'interfaccia a riga di comando Firebase per scoprire come installarla o eseguire l'upgrade alla versione più recente.

  2. Inizializza il progetto Firebase. Esegui questo comando dalla directory radice della directory dell'app locale:

    firebase init

  3. Avvia il server locale per lo sviluppo. Esegui questo comando dalla directory radice della directory dell'app locale:

    firebase serve

Risorse open source per gli SDK Firebase JavaScript

Firebase supporta lo sviluppo open source e incoraggiamo i contributi e i feedback della community.

SDK Firebase JavaScript

La maggior parte degli SDK Firebase JavaScript sono sviluppate come librerie open source nel nostro repository GitHub di Firebase pubblico.

Esempi di guida rapida

Firebase gestisce una raccolta di esempi di avvio rapido per la maggior parte delle API Firebase sul web. Puoi trovare queste guide rapide nel nostro repository GitHub delle guide rapide di Firebase. Puoi utilizzare queste guide rapide come codice di esempio per utilizzare gli SDK Firebase.