Mit der Firebase-CLI können Sie Ihre Angular-Anwendung in Firebase bereitstellen und Ihren Nutzern dynamische Inhalte zur Verfügung stellen.
Hinweis
Bevor Sie mit der Bereitstellung Ihrer App in Firebase beginnen, prüfen Sie die folgenden Anforderungen und Optionen:
- Firebase-Befehlszeile 12.1.0 oder höher. Installieren Sie die Befehlszeile mit der gewünschten Methode.
Optional: Abrechnung in Ihrem 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-Befehlszeile die Vorschau der Web-Frameworks:
firebase experiments:enable webframeworks
Führen Sie den Initialisierungsbefehl über die Befehlszeile aus und folgen Sie dann den Eingabeaufforderungen:
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. Dies kann eine vorhandene Angular-App sein.
Wählen Sie bei Aufforderung „Angular“ aus.
Vorhandenes Projekt initialisieren
Ändern Sie die Hostingkonfiguration in firebase.json
so, dass sie die Option source
anstelle von public
enthält. Beispiel:
{
"hosting": {
"source": "./path-to-your-angular-workspace"
}
}
Statische Inhalte bereitstellen
Nachdem Sie Firebase initialisiert haben, können Sie statische Inhalte mit dem Standardbefehl für die Bereitstellung bereitstellen:
firebase deploy
Dynamischen Content vorab rendern
Wenn Sie dynamische Inhalte in Angular vorab rendern möchten, müssen Sie Angular Universal einrichten. Die Firebase-Befehlszeile erwartet Express Engine:
ng add @nguniversal/express-engine
Weitere Informationen finden Sie im Leitfaden zu Angular Universal.
Prerender-URLs hinzufügen
Standardmäßig wird nur das Stammverzeichnis vorab gerendert. Sie können weitere Routen hinzufügen, indem Sie den Pre-Rendering-Schritt in angular.json
suchen und weitere Routen hinzufügen:
{
"prerender": {
"builder": "@nguniversal/builders:prerender",
"options": {
"routes": ["/", "ANOTHER_ROUTE", "AND_ANOTHER"]
},
"configurations": {
/* ... */
},
"defaultConfiguration": "production"
}
}
Firebase berücksichtigt auch eine guessRoutes
- oder routes.txt
-Datei im Hosting-Stammverzeichnis, falls Sie weitere Anpassungen vornehmen müssen. Weitere Informationen zu diesen Optionen finden Sie im Angular-Leitfaden zum Prerendering.
Optional: Servermodul hinzufügen
Bereitstellen
Bei der Bereitstellung mit firebase deploy
erstellt Firebase Ihr Browser-Bundle und Ihr Server-Bundle und rendert die Anwendung vorab. Diese Elemente werden auf Hosting und Cloud Functions for Firebase bereitgestellt.
Benutzerdefinierte Bereitstellung
Die Firebase-Befehlszeile geht davon aus, dass Sie in Ihren Schaltplänen mit einer Produktionskonfiguration Server-, Build- und Pre-Render-Schritte haben.
Wenn Sie die Annahmen der Befehlszeile anpassen möchten, konfigurieren Sie ng deploy
und bearbeiten Sie die Konfiguration in angular.json
. Zum Beispiel kannst du SSR deaktivieren und vorgerenderte Inhalte ausschließlich bereitstellen, indem du serverTarget
entfernst:
{
"deploy": {
"builder": "@angular/fire:deploy",
"options": {
"browserTarget": "app:build:production",
"serverTarget": "app:server:production",
"prerenderTarget": "app:prerender:production"
}
}
}
Optional: Integration mit dem Firebase JS SDK
Wenn Sie Firebase JS SDK-Methoden sowohl in Server- als auch in Client-Bundles einbinden, prüfen Sie vor der Verwendung des Produkts isSupported()
, um Laufzeitfehler zu vermeiden.
Nicht alle Produkte werden in allen Umgebungen unterstützt.
Optional: Firebase Admin SDK einbinden
Admin-Bundles funktionieren nicht, wenn sie in Ihrem Browser-Build enthalten sind. Sie sollten sie daher in Ihrem Servermodul bereitstellen und als optionale Abhängigkeit einschleusen:
// 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: Firebase Authentication einbinden
Die auf dem Web-Framework basierenden Firebase-Bereitstellungstools halten den Client- und Serverstatus mithilfe von Cookies automatisch synchron. Das Express-Objekt res.locals
enthält optional eine authentifizierte Firebase App-Instanz (firebaseApp
) und den derzeit angemeldeten Nutzer (currentUser
). Diese können über das REQUEST-Token (aus @nguniversal/express-engine/tokens exportiert) in Ihr Modul eingefügt werden.