Mit der Framework-kompatiblen Firebase-CLI können Sie Ihre Angular-Anwendung in Firebase bereitstellen und Nutzern dynamische Inhalte präsentieren.
Hinweis
Bevor Sie mit der Bereitstellung Ihrer App in Firebase beginnen, sollten Sie sich die folgenden Anforderungen und Optionen ansehen:
- Firebase CLI-Version 12.1.0 oder höher. Installieren Sie die CLI mit der gewünschten Methode.
Optional: Abrechnung für Ihr Firebase-Projekt aktiviert (erforderlich, wenn Sie SSR verwenden möchten)
Optional: AngularFire
Firebase initialisieren
Initialisieren Sie zuerst Firebase für Ihr Framework-Projekt.
Verwenden Sie die Firebase CLI für ein neues Projekt oder ändern Sie firebase.json
für ein vorhandenes Projekt.
Neues Projekt initialisieren
- Aktivieren Sie in der Firebase CLI die Vorschau für Web-Frameworks:
firebase experiments:enable webframeworks
Führen Sie den Initialisierungsbefehl über die CLI aus und folgen Sie dann der Anleitung:
firebase init hosting
Antworten Sie mit „Ja“ auf die Frage „Möchten Sie ein Web-Framework verwenden? (experimentell)“
Wählen Sie das Hosting-Quellverzeichnis aus. Das kann eine vorhandene Angular-App sein.
Wählen Sie bei Aufforderung „Angular“ aus.
Vorhandenes Projekt initialisieren
Ändern Sie die Hosting-Konfiguration in firebase.json
so, dass sie die Option source
anstelle der Option public
enthält. Beispiel:
{
"hosting": {
"source": "./path-to-your-angular-workspace"
}
}
Statische Inhalte bereitstellen
Nach der Initialisierung von Firebase können Sie statische Inhalte mit dem Standardbereitstellungsbefehl bereitstellen:
firebase deploy
Dynamische Inhalte vorrendern
Wenn Sie dynamische Inhalte in Angular vorrendern möchten, müssen Sie Angular SSR einrichten.
ng add @angular/ssr
Weitere Informationen finden Sie im Leitfaden zum Angular-Prerendering (SSG).
Optional: Servermodul hinzufügen
Bereitstellen
Wenn Sie die Bereitstellung mit firebase deploy
vornehmen, erstellt Firebase Ihr Browser-Bundle und Ihr Server-Bundle und rendert die Anwendung vor. Diese Elemente werden in Hosting und Cloud Functions for Firebase bereitgestellt.
Benutzerdefinierte Bereitstellung
Die Firebase-Befehlszeile geht davon aus, dass Sie in Ihrer angular.json
eine einzelne Anwendung mit einer Produktionsbuild-Konfiguration definiert haben.
Wenn Sie die Annahmen der CLI anpassen müssen, können Sie entweder die Umgebungsvariable FIREBASE_FRAMEWORKS_BUILD_TARGET
verwenden oder AngularFire hinzufügen und angular.json
ändern:
{
"deploy": {
"builder": "@angular/fire:deploy",
"options": {
"version": 2,
"buildTarget": "OVERRIDE_YOUR_BUILD_TARGET"
}
}
}
Optional: Firebase JS SDK einbinden
Wenn Sie Firebase JS SDK-Methoden sowohl in Server- als auch in Client-Bundles einbinden, sollten Sie Laufzeitfehler vermeiden, indem Sie isSupported()
prüfen, bevor Sie das Produkt verwenden.
Nicht alle Produkte werden in allen Umgebungen unterstützt.
Optional: Firebase Admin SDK einbinden
Administrator-Bundles schlagen fehl, wenn sie in Ihrem Browser-Build enthalten sind. Stellen Sie sie daher in Ihrem Servermodul bereit und fügen Sie sie als optionale Abhängigkeit ein:
// your-component.ts
import type { app } from 'firebase-admin';
import { FIREBASE_ADMIN } from '../app.module';
@Component({...})
export class YourComponent {
constructor(@Optional() @Inject(FIREBASE_ADMIN) admin: app.App) {
...
}
}
// app.server.module.ts
import * as admin from 'firebase-admin';
import { FIREBASE_ADMIN } from './app.module';
@NgModule({
…
providers: [
…
{ provide: FIREBASE_ADMIN, useFactory: () => admin.apps[0] || admin.initializeApp() }
],
})
export class AppServerModule {}
// app.module.ts
import type { app } from 'firebase-admin';
export const FIREBASE_ADMIN = new InjectionToken<app.App>('firebase-admin');
Vollständig dynamische Inhalte mit SSR bereitstellen
Optional: In Firebase Authentication einbinden
Die webframework-kompatiblen Firebase-Bereitstellungstools sorgen automatisch dafür, dass Client- und Serverstatus mithilfe von Cookies synchronisiert werden. Das Express-res.locals
-Objekt enthält optional eine authentifizierte Firebase-App-Instanz (firebaseApp
) und den derzeit angemeldeten Nutzer (currentUser
). Diese können über das REQUEST-Token (exportiert aus @nguniversal/express-engine/tokens) in Ihr Modul eingefügt werden.