Za pomocą interfejsu wiersza poleceń Firebase możesz wdrożyć aplikację Angular w Firebase i udostępniać zawartość dynamiczną użytkownikom.
Zanim zaczniesz
Zanim rozpoczniesz wdrażanie aplikacji w Firebase, zapoznaj się z tymi wymaganiami i opcjami:
- Interfejs wiersza poleceń Firebase w wersji 12.1.0 lub nowszej. Zainstaluj interfejs wiersza poleceń przy użyciu preferowanej metody.
Opcjonalnie: płatności włączone w projekcie Firebase (wymagane, jeśli zamierzasz używać SSR)
Opcjonalnie: AngularFire
Zainicjuj Firebase
Aby rozpocząć, zainicjuj Firebase dla swojego projektu platformy.
Użyj interfejsu wiersza poleceń Firebase w nowym projekcie lub zmodyfikuj firebase.json
w istniejącym projekcie.
Zainicjuj nowy projekt
- W interfejsie wiersza poleceń Firebase włącz podgląd platform internetowych:
firebase experiments:enable webframeworks
Uruchom polecenie inicjowania w interfejsie wiersza poleceń, a potem postępuj zgodnie z instrukcjami:
firebase init hosting
Odpowiedz „Tak” na „Czy chcesz użyć platformy internetowej? (funkcja eksperymentalna)”
Wybierz źródłowy katalog hostingu; może to być istniejąca aplikacja Angular.
Jeśli pojawi się taka prośba, wybierz Angular.
Zainicjuj istniejący projekt
Zmień konfigurację hostingu w firebase.json
, aby zamiast opcji public
była dostępna opcja source
. Przykład:
{
"hosting": {
"source": "./path-to-your-angular-workspace"
}
}
Wyświetlanie treści statycznych
Po zainicjowaniu Firebase możesz wyświetlać zawartość statyczną za pomocą standardowego polecenia wdrożenia:
firebase deploy
Wstępne renderowanie treści dynamicznych
Aby wstępnie renderować treści dynamiczne w Angular, musisz skonfigurować Angular Universal. Interfejs wiersza poleceń Firebase wymaga usługi Express Engine:
ng add @nguniversal/express-engine
Więcej informacji znajdziesz w przewodniku po uniwersalnym Angular.
Dodawanie adresów URL renderowania wstępnego
Domyślnie wstępnie renderowany będzie tylko katalog główny. Aby dodać więcej tras, znajdź krok renderowania wstępnego w angular.json
i dodaj więcej tras:
{
"prerender": {
"builder": "@nguniversal/builders:prerender",
"options": {
"routes": ["/", "ANOTHER_ROUTE", "AND_ANOTHER"]
},
"configurations": {
/* ... */
},
"defaultConfiguration": "production"
}
}
W razie potrzeby Firebase przestrzega również pliku guessRoutes
lub routes.txt
w katalogu głównym hostingu. Więcej informacji o tych opcjach znajdziesz w przewodniku po renderowaniu wstępnym w Angular.
Opcjonalnie: dodaj moduł serwera
Wdrażanie
Podczas wdrażania za pomocą firebase deploy
Firebase skompiluje pakiet przeglądarki i serwer, a następnie wstępnie renderuje aplikację. Te elementy są wdrażane w Hostingu i Cloud Functions dla Firebase.
Wdrożenie niestandardowe
Interfejs wiersza poleceń Firebase zakłada, że w schematach masz kroki serwera, kompilacji i wstępnego renderowania z konfiguracją produkcyjną.
Jeśli chcesz dostosować założenia interfejsu wiersza poleceń, skonfiguruj ng deploy
i edytuj konfigurację w sekcji angular.json
. Możesz na przykład wyłączyć SSR i wyświetlać wstępnie renderowane treści, usuwając element serverTarget
:
{
"deploy": {
"builder": "@angular/fire:deploy",
"options": {
"browserTarget": "app:build:production",
"serverTarget": "app:server:production",
"prerenderTarget": "app:prerender:production"
}
}
}
Opcjonalnie: integracja z pakietem SDK Firebase JS
Gdy uwzględniasz metody Firebase JS SDK w pakietach serwera i klienta, pamiętaj o błędach działania, sprawdzając plik isSupported()
przed użyciem usługi.
Nie wszystkie usługi są obsługiwane we wszystkich środowiskach.
Opcjonalnie: integracja z pakietem Firebase Admin SDK
Jeśli znajdą się w kompilacji przeglądarki, pakiety administracyjne nie zadziałają, dlatego rozważ umieszczenie ich w module serwera i wstrzyknięcie jako zależność opcjonalną:
// 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');
Wyświetlanie w pełni dynamicznej treści przy użyciu SSR
Opcjonalnie: integracja z Uwierzytelnianiem Firebase
Działające w Firebase narzędzie do wdrażania korzystające z platformy internetowej automatycznie synchronizuje stan klienta i serwera za pomocą plików cookie. Obiekt Express res.locals
będzie opcjonalnie zawierać uwierzytelnioną instancję aplikacji Firebase (firebaseApp
) i aktualnie zalogowanego użytkownika (currentUser
). Można go wstrzykiwać do modułu za pomocą tokena REQUEST (wyeksportowanego z @nguniversal/express-engine/tokens).