Avec la CLI compatible avec le framework Firebase, vous pouvez déployer votre application Angular sur Firebase et diffuser du contenu dynamique auprès de vos utilisateurs.
Avant de commencer
Avant de commencer à déployer votre application sur Firebase, consultez les exigences et les options suivantes :
- CLI Firebase version 12.1.0 ou ultérieure. Veillez à installer la CLI en utilisant la méthode de votre choix.
Facultatif : Facturation activée dans votre projet Firebase (obligatoire si vous prévoyez d'utiliser le SSR)
Facultatif : AngularFire
Initialiser Firebase
Pour commencer, initialisez Firebase pour votre projet de framework.
Utilisez la CLI Firebase pour un nouveau projet ou modifiez firebase.json
pour un projet existant.
Initialiser un nouveau projet
- Dans la CLI Firebase, activez l'aperçu des frameworks Web:
firebase experiments:enable webframeworks
Exécutez la commande d'initialisation à partir de la CLI, puis suivez les instructions:
firebase init hosting
Répondez "Oui" à la question "Voulez-vous utiliser un framework Web ? (expérimental)"
Choisissez le répertoire source d'hébergement. Il peut s'agir d'une application Angular existante.
Si vous y êtes invité, sélectionnez Angular.
Initialiser un projet existant
Modifiez la configuration d'hébergement dans firebase.json
pour utiliser une option source
plutôt qu'une option public
. Exemple :
{
"hosting": {
"source": "./path-to-your-angular-workspace"
}
}
Diffuser du contenu statique
Après avoir initialisé Firebase, vous pouvez diffuser du contenu statique à l'aide de la commande de déploiement standard:
firebase deploy
Prérendre du contenu dynamique
Pour précharger le contenu dynamique dans Angular, vous devez configurer Angular Universal. La CLI Firebase s'attend à Express Engine :
ng add @nguniversal/express-engine
Pour en savoir plus, consultez le guide Angular Universal.
Ajouter des URL de préchargement
Par défaut, seul le répertoire racine est prérendu. Vous pouvez ajouter des routes supplémentaires en localisant l'étape de prérendu dans angular.json
et en ajoutant d'autres routes:
{
"prerender": {
"builder": "@nguniversal/builders:prerender",
"options": {
"routes": ["/", "ANOTHER_ROUTE", "AND_ANOTHER"]
},
"configurations": {
/* ... */
},
"defaultConfiguration": "production"
}
}
Firebase respecte également guessRoutes
ou un fichier routes.txt
dans la racine d'hébergement, si vous devez effectuer d'autres personnalisations. Pour en savoir plus sur ces options, consultez le guide de préchargement d'Angular.
Facultatif: ajouter un module de serveur
Déployer
Lorsque vous déployez avec firebase deploy
, Firebase crée votre bundle de navigateur, votre bundle de serveur et prérend l'application. Ces éléments sont déployés dans Hosting et Cloud Functions for Firebase.
Déploiement personnalisé
La CLI Firebase suppose que vous disposez d'étapes de serveur, de compilation et de prérendu dans vos schémas avec une configuration de production.
Si vous souhaitez adapter les hypothèses de la CLI, configurez ng deploy
et modifiez la configuration dans angular.json
. Par exemple, vous pouvez désactiver le SSR et diffuser exclusivement du contenu pré-rendu en supprimant serverTarget
:
{
"deploy": {
"builder": "@angular/fire:deploy",
"options": {
"browserTarget": "app:build:production",
"serverTarget": "app:server:production",
"prerenderTarget": "app:prerender:production"
}
}
}
(Facultatif) Intégrez le SDK Firebase JS.
Lorsque vous incluez des méthodes du SDK JS Firebase dans des bundles de serveurs et de clients, protégez-vous contre les erreurs d'exécution en vérifiant isSupported()
avant d'utiliser le produit.
Tous les produits ne sont pas compatibles avec tous les environnements.
Facultatif: intégrer le SDK Firebase Admin
Les bundles d'administrateurs échoueront s'ils sont inclus dans le build de votre navigateur. Par conséquent, envisagez de les fournir dans votre module de serveur et de les injecter en tant que dépendance facultative:
// 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');
Diffuser du contenu entièrement dynamique avec le SSR
Facultatif : Intégrer à Firebase Authentication
Les outils de déploiement Firebase compatibles avec le framework Web synchronisent automatiquement l'état du client et du serveur à l'aide de cookies. L'objet Express res.locals
contiendra éventuellement une instance d'application Firebase authentifiée (firebaseApp
) et l'utilisateur actuellement connecté (currentUser
). Il peut être injecté dans votre module via le jeton REQUEST (exporté depuis @nguniversal/express-engine/tokens).