Firebase für das Web

Bei der Entwicklung einer Web-App mit Firebase stoßen Sie möglicherweise auf unbekannte Konzepte oder Bereiche, in denen Sie weitere Informationen benötigen, um die richtigen Entscheidungen für Ihr Projekt zu treffen. Auf dieser Seite werden diese Fragen beantwortet oder Sie werden zu Ressourcen weitergeleitet, in denen Sie mehr erfahren können.

Wenn Sie Fragen zu einem Thema haben, das auf dieser Seite nicht behandelt wird, besuchen Sie eine unserer Online-Communities. Wir aktualisieren diese Seite regelmäßig mit neuen Themen. Schauen Sie also immer mal wieder vorbei, ob das Thema, über das Sie mehr erfahren möchten, hinzugefügt wurde.

SDK-Versionen: Namespaced und modular

Firebase bietet zwei API-Oberflächen für Web-Apps:

  • JavaScript – mit Namespace Dies ist die JavaScript-Schnittstelle, die Firebase viele Jahre lang verwaltet hat und die Webentwicklern mit älteren Firebase-Apps vertraut ist. Da die API mit Namespace nicht von der laufenden Unterstützung neuer Funktionen profitiert, sollten die meisten neuen Apps stattdessen die modulare API verwenden.
  • JavaScript – modular Dieses SDK basiert auf einem modularen Ansatz, der für eine geringere SDK-Größe und eine höhere Effizienz mit modernen JavaScript-Build-Tools wie webpack oder Rollup sorgt.

Die modulare API lässt sich gut in Build-Tools integrieren, die nicht verwendeten Code aus Ihrer App entfernen. Dieser Vorgang wird als „Tree Shaking“ bezeichnet. Apps, die mit diesem SDK entwickelt wurden, haben eine deutlich geringere Größe. Die API mit Namespace ist zwar als Modul verfügbar, hat aber keine streng modulare Struktur und bietet nicht denselben Grad an Größenreduzierung.

Obwohl die meisten modularen APIs denselben Mustern wie die Namespace-APIs folgen, ist die Organisation des Codes anders. Im Allgemeinen ist die API mit Namespace auf ein Namespace- und Dienstmuster ausgerichtet, während die modulare API auf einzelne Funktionen ausgerichtet ist. Beispielsweise wird die Punktverkettung der API mit Namespace, z. B. firebaseApp.auth(), in der modularen API durch eine einzelne getAuth()-Funktion ersetzt, die firebaseApp verwendet und eine Authentication-Instanz zurückgibt.

Das bedeutet, dass Web-Apps, die mit der Namespace-API erstellt wurden, refaktoriert werden müssen, um die Vorteile des modularen App-Designs nutzen zu können. Weitere Informationen finden Sie in der Upgrade-Anleitung.

JavaScript – modulare API für neue Apps

Wenn Sie mit einer neuen Integration mit Firebase beginnen, können Sie die modulare API aktivieren, wenn Sie das SDK hinzufügen und initialisieren.

Denken Sie bei der Entwicklung Ihrer App daran, dass Ihr Code hauptsächlich um Funktionen herum organisiert wird. In der modularen API werden Dienste als erstes Argument übergeben. Die Funktion verwendet dann die Details des Dienstes, um den Rest zu erledigen. Beispiel:

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

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

Weitere Beispiele und Details finden Sie in den Anleitungen für die einzelnen Produktbereiche sowie in der modularen API-Referenzdokumentation.

Web-SDKs in Ihre App einfügen

Firebase stellt JavaScript-Bibliotheken für die meisten Firebase-Produkte bereit, darunter Remote Config und FCM. Wie Sie Firebase SDKs in Ihre Web-App einfügen, hängt davon ab, welche Tools Sie für Ihre App verwenden, z. B. einen Modul-Bundler.

Sie können Ihrer App eine der verfügbaren Bibliotheken über eine der unterstützten Methoden hinzufügen:

  • npm (für Modul-Bundler)
  • CDN (Content Delivery Network)

Eine detaillierte Einrichtungsanleitung finden Sie unter Firebase zu Ihrer JavaScript-App hinzufügen. Im restlichen Teil dieses Abschnitts finden Sie Informationen, die Ihnen bei der Auswahl der verfügbaren Optionen helfen.

npm

Wenn Sie das Firebase-npm-Paket herunterladen (das sowohl Browser- als auch Node.js-Bundles enthält), erhalten Sie eine lokale Kopie des Firebase SDK, die möglicherweise für Nicht-Browser-Anwendungen wie Node.js-Apps, React Native oder Electron erforderlich ist. Der Download enthält Node.js- und React Native-Bundles als Option für einige Pakete. Die Node.js-Bundles sind für das serverseitige Rendering (SSR) von SSR-Frameworks erforderlich.

Wenn Sie npm mit einem Modul-Bundler wie webpack oder Rollup verwenden, haben Sie Optimierungsoptionen, um ungenutzten Code zu entfernen und gezielte Polyfills anzuwenden. Dadurch kann die Größe Ihrer App erheblich reduziert werden. Die Implementierung dieser Funktionen kann Ihre Konfiguration und Build-Kette etwas komplexer machen, aber verschiedene gängige CLI-Tools können dabei helfen. Zu diesen Tools gehören Angular, React, Vue und Next.

Zusammenfassung:

  • Bietet eine wertvolle Optimierung der App-Größe
  • Es sind robuste Tools zum Verwalten von Modulen verfügbar.
  • Für SSR mit Node.js erforderlich

CDN (Content Delivery Network)

Das Hinzufügen von Bibliotheken, die auf dem CDN von Firebase gespeichert sind, ist eine einfache Methode zur SDK-Einrichtung, die vielen Entwicklern vertraut sein dürfte. Wenn Sie das CDN zum Hinzufügen der SDKs verwenden, benötigen Sie kein Build-Tool. Ihre Build-Kette ist im Vergleich zu Modul-Bundlern in der Regel einfacher und leichter zu handhaben. Wenn Sie sich nicht besonders um die installierte Größe Ihrer App sorgen und keine besonderen Anforderungen wie das Transpilieren von TypeScript haben, ist CDN möglicherweise eine gute Wahl.

Zusammenfassung:

  • Vertraut und einfach
  • Geeignet, wenn die App-Größe keine große Rolle spielt
  • Geeignet, wenn auf Ihrer Website keine Build-Tools verwendet werden.

Firebase Web SDK-Varianten

Das Web-SDK von Firebase kann sowohl in Browser- als auch in Node-Anwendungen verwendet werden. Einige Produkte sind jedoch nicht in Node-Umgebungen verfügbar. Liste der unterstützten Umgebungen

Einige Produkt-SDKs bieten separate Browser- und Node-Varianten, die jeweils in den Formaten ESM und CJS verfügbar sind. Einige Produkt-SDKs bieten sogar Cordova- oder React Native-Varianten. Das Web-SDK ist so konfiguriert, dass es die richtige Variante basierend auf Ihrer Tooling-Konfiguration oder Umgebung bereitstellt. In den meisten Fällen ist keine manuelle Auswahl erforderlich. Alle SDK-Varianten sind darauf ausgelegt, Web- oder Client-Apps für den Endnutzerzugriff zu erstellen, z. B. in einer Node.js-Desktop- oder IoT-Anwendung. Wenn Sie Administratorzugriff über privilegierte Umgebungen (z. B. Server) einrichten möchten, verwenden Sie stattdessen die Firebase Admin SDK.

Umgebungserkennung mit Bundlern und Frameworks

Wenn Sie das Firebase Web SDK mit npm installieren, werden sowohl die JavaScript- als auch die Node.js-Version installiert. Das Paket bietet eine detaillierte Umgebungserkennung, um die richtigen Bundles für Ihre Anwendung zu ermöglichen.

Wenn in Ihrem Code Node.js-require-Anweisungen verwendet werden, wird das Node-spezifische Bundle vom SDK gefunden. Andernfalls müssen die Einstellungen Ihres Bundlers richtig konfiguriert sein, damit das richtige Einstiegspunktfeld in Ihrer package.json-Datei erkannt wird (z. B. main, browser oder module). Wenn Laufzeitfehler mit dem SDK auftreten, prüfen Sie, ob Ihr Bundler so konfiguriert ist, dass der richtige Bundletyp für Ihre Umgebung priorisiert wird.

Firebase-Konfigurationsobjekt

Zum Initialisieren von Firebase in Ihrer App müssen Sie die Firebase-Konfiguration Ihrer App angeben. Sie können Ihr Firebase-Konfigurationsobjekt jederzeit abrufen.

  • Wir raten davon ab, das Konfigurationsobjekt manuell zu bearbeiten, insbesondere die folgenden erforderlichen Firebase-Optionen: apiKey, projectId und appID. Wenn Sie Ihre App mit ungültigen oder fehlenden Werten für diese erforderlichen „Firebase-Optionen“ initialisieren, kann es bei Nutzern Ihrer App zu schwerwiegenden Problemen kommen. Die einzige Ausnahme ist authDomain, das gemäß den Best Practices für die Verwendung von signInWithRedirect aktualisiert werden kann.

  • Wenn Sie Google Analytics in Ihrem Firebase-Projekt aktiviert haben, enthält Ihr Konfigurationsobjekt das Feld measurementId. Weitere Informationen zu diesem FeldAnalytics

  • Wenn Sie Google Analytics oder Realtime Database nach der Erstellung Ihrer Firebase-Web-App aktivieren, muss das Firebase-Konfigurationsobjekt, das Sie in Ihrer App verwenden, mit den zugehörigen Konfigurationswerten (measurementId bzw. databaseURL) aktualisiert werden. Sie können das Firebase-Konfigurationsobjekt jederzeit abrufen.

Hier ist das Format eines Konfigurationsobjekts, in dem alle Dienste aktiviert sind (diese Werte werden automatisch eingefügt):

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",
  // The value of `storageBucket` depends on when you provisioned your default bucket (learn more)
  storageBucket: "PROJECT_ID.firebasestorage.app",
  messagingSenderId: "SENDER_ID",
  appId: "APP_ID",
  // For Firebase JavaScript SDK v7.20.0 and later, `measurementId` is an optional field
  measurementId: "G-MEASUREMENT_ID",
};

Verfügbare Bibliotheken

Zusätzliche Einrichtungsoptionen

Laden von Firebase SDKs (aus dem CDN) verzögern

Sie können das Einbinden der Firebase SDKs verzögern, bis die gesamte Seite geladen wurde. Wenn Sie modulare API-CDN-Skripts mit <script type="module"> verwenden, ist dies das Standardverhalten. Wenn Sie CDN-Skripts mit Namespace als Modul verwenden, gehen Sie so vor, um das Laden zu verzögern:

  1. Fügen Sie jedem script-Tag für die Firebase SDKs ein defer-Flag hinzu und verschieben Sie dann die Initialisierung von Firebase mit einem zweiten Skript, z. B.:

    <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. Erstellen Sie eine init-firebase.js-Datei und fügen Sie Folgendes in die Datei ein:

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

Mehrere Firebase-Projekte in einer einzelnen App verwenden

In den meisten Fällen müssen Sie Firebase nur in einer einzelnen Standard-App initialisieren. Sie können auf zwei gleichwertige Arten auf Firebase zugreifen:

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

Manchmal müssen Sie jedoch gleichzeitig auf mehrere Firebase-Projekte zugreifen. Sie möchten beispielsweise Daten aus der Datenbank eines Firebase-Projekts lesen, Dateien aber in einem anderen Firebase-Projekt speichern. Möglicherweise möchten Sie auch ein Projekt authentifizieren, während ein zweites Projekt nicht authentifiziert bleibt.

Mit dem Firebase JavaScript SDK können Sie mehrere Firebase-Projekte gleichzeitig in einer einzelnen App initialisieren und verwenden. Jedes Projekt verwendet dabei seine eigenen Firebase-Konfigurationsinformationen.

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

Lokalen Webserver für die Entwicklung ausführen

Wenn Sie eine Web-App entwickeln, müssen Sie einige Teile des Firebase JavaScript SDK über einen Server und nicht über das lokale Dateisystem bereitstellen. Sie können die Firebase-CLI verwenden, um einen lokalen Server auszuführen.

Wenn Sie Firebase Hosting für Ihre App bereits eingerichtet haben, haben Sie möglicherweise schon einige der folgenden Schritte ausgeführt.

Zum Bereitstellen Ihrer Web-App verwenden Sie die Firebase CLI, ein Befehlszeilentool.

  1. In der Firebase-CLI-Dokumentation finden Sie Informationen zum Installieren des CLI oder zum Aktualisieren auf die neueste Version.

  2. Initialisieren Sie Ihr Firebase-Projekt. Führen Sie den folgenden Befehl im Stammverzeichnis Ihrer lokalen App aus:

    firebase init

  3. Starten Sie den lokalen Server für die Entwicklung. Führen Sie den folgenden Befehl im Stammverzeichnis Ihres lokalen App-Verzeichnisses aus:

    firebase serve

Open-Source-Ressourcen für Firebase JavaScript SDKs

Firebase unterstützt die Open-Source-Entwicklung und wir freuen uns über Beiträge und Feedback aus der Community.

Firebase JavaScript SDKs

Die meisten Firebase JavaScript SDKs werden als Open-Source-Bibliotheken in unserem öffentlichen Firebase-GitHub-Repository entwickelt.

Beispiele für den Schnelleinstieg

Firebase bietet eine Sammlung von Kurzanleitungen für die meisten Firebase-APIs im Web. Sie finden diese Kurzanleitungen in unserem öffentlichen Firebase-GitHub-Repository für Kurzanleitungen. Sie können diese Schnellstarts als Beispielcode für die Verwendung von Firebase SDKs verwenden.