Con la CLI Firebase compatibile con il framework, puoi distribuire la tua applicazione Angular su Firebase e fornire contenuti dinamici ai tuoi utenti.
Prima di iniziare
Prima di iniziare a distribuire la tua app su Firebase, esamina i seguenti requisiti e opzioni:
- Firebase CLI versione 12.1.0 o successiva. Assicurati di installare la CLI utilizzando il tuo metodo preferito.
Facoltativo: fatturazione abilitata sul tuo progetto Firebase (obbligatorio se prevedi di utilizzare SSR)
Facoltativo: AngularFire
Inizializza Firebase
Per iniziare, inizializza Firebase per il tuo progetto framework. Utilizza l'interfaccia a riga di comando di Firebase per un nuovo progetto o modifica firebase.json
per un progetto esistente.
Inizializza un nuovo progetto
- Nella CLI di Firebase, abilita l'anteprima dei framework web:
firebase experiments:enable webframeworks
Eseguire il comando di inizializzazione dalla CLI e quindi seguire le istruzioni:
firebase init hosting
Rispondi sì a "Vuoi usare un framework web? (sperimentale)"
Scegli la directory di origine dell'hosting; questa potrebbe essere un'app Angular esistente.
Se richiesto, scegli Angolare.
Inizializza un progetto esistente
Modifica la tua configurazione di hosting in firebase.json
per avere un'opzione source
, piuttosto che un'opzione public
. Per esempio:
{
"hosting": {
"source": "./path-to-your-angular-workspace"
}
}
Servi contenuti statici
Dopo aver inizializzato Firebase, puoi pubblicare contenuti statici con il comando di distribuzione standard:
firebase deploy
Eseguire il pre-rendering dei contenuti dinamici
Per eseguire il prerendering di contenuto dinamico in Angular, devi configurare Angular Universal. L'interfaccia a riga di comando di Firebase prevede Express Engine:
ng add @nguniversal/express-engine
Consulta la guida di Angular Universal per ulteriori informazioni.
Aggiungi URL di prerendering
Per impostazione predefinita, verrà eseguito il prerendering solo della directory radice. Puoi aggiungere percorsi aggiuntivi individuando il passaggio di prerendering in angular.json
e aggiungendo altri percorsi:
{
"prerender": {
"builder": "@nguniversal/builders:prerender",
"options": {
"routes": ["/", "ANOTHER_ROUTE", "AND_ANOTHER"]
},
"configurations": {
/* ... */
},
"defaultConfiguration": "production"
}
}
Firebase rispetta anche guessRoutes
o un file routes.txt
nella root di hosting, se è necessario personalizzare ulteriormente. Consulta la guida al prerendering di Angular per ulteriori informazioni su tali opzioni.
Facoltativo: aggiungi un modulo server
Distribuisci
Quando esegui la distribuzione con firebase deploy
, Firebase crea il bundle del browser, il bundle del server e esegue il prerendering dell'applicazione. Questi elementi vengono distribuiti a Hosting e Cloud Functions per Firebase.
Distribuzione personalizzata
L'interfaccia a riga di comando di Firebase presuppone che tu abbia passaggi di server, build e prerendering nei tuoi schemi con una configurazione di produzione.
Se desideri personalizzare i presupposti della CLI, configura ng deploy
e modifica la configurazione in angular.json
. Ad esempio, puoi disabilitare SSR e pubblicare contenuti pre-renderizzati esclusivamente rimuovendo serverTarget
:
{
"deploy": {
"builder": "@angular/fire:deploy",
"options": {
"browserTarget": "app:build:production",
"serverTarget": "app:server:production",
"prerenderTarget": "app:prerender:production"
}
}
}
Facoltativo: integrazione con l'SDK JS di Firebase
Quando includi i metodi SDK di Firebase JS nei bundle server e client, proteggiti dagli errori di runtime controllando isSupported()
prima di utilizzare il prodotto. Non tutti i prodotti sono supportati in tutti gli ambienti .
Facoltativo: integrazione con Firebase Admin SDK
I bundle di amministrazione falliranno se sono inclusi nella build del tuo browser, quindi considera di fornirli nel tuo modulo server e di iniettarli come dipendenza facoltativa:
// 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');
Offri contenuti completamente dinamici con SSR
Facoltativo: integrazione con Firebase Authentication
Gli strumenti di distribuzione Firebase compatibili con il framework Web mantengono automaticamente sincronizzati lo stato del client e del server utilizzando i cookie. L'oggetto Express res.locals
conterrà facoltativamente un'istanza dell'app Firebase autenticata ( firebaseApp
) e l'utente attualmente connesso ( currentUser
). Questo può essere inserito nel tuo modulo tramite il token REQUEST (esportato da @nguniversal/express-engine/tokens).