Avec la CLI Firebase compatible avec les frameworks, vous pouvez déployer votre application Angular sur Firebase et diffuser du contenu dynamique à vos utilisateurs.
Avant de commencer
Avant de commencer à déployer votre application sur Firebase, passez en revue les exigences et les options suivantes :
- Firebase CLI version 12.1.0 ou ultérieure. Veillez à installer la CLI en utilisant la méthode de votre choix.
(Facultatif) La facturation est activée dans votre projet Firebase (obligatoire si vous prévoyez d'utiliser le rendu côté serveur).
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 l'interface de ligne de commande Firebase, activez l'aperçu des frameworks Web :
firebase experiments:enable webframeworks
Exécutez la commande d'initialisation depuis la CLI, puis suivez les instructions :
firebase init hosting
Répondez "Oui" à la question "Do you want to use a web framework?" (Voulez-vous utiliser un framework Web ?). (version expérimentale)"
Choisissez le répertoire source de l'hébergement. Il peut s'agir d'une application Angular existante.
Si vous y êtes invité, sélectionnez Angular.
Initialiser un projet existant
Modifiez votre configuration d'hébergement dans firebase.json
pour avoir 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érendre du contenu dynamique dans Angular, vous devez configurer Angular SSR.
ng add @angular/ssr
Pour en savoir plus, consultez le guide sur le prérendu Angular (SSG).
Facultatif : ajoutez un module de serveur
Déployer
Lorsque vous déployez avec firebase deploy
, Firebase crée votre bundle de navigateur et votre bundle de serveur, et effectue le prérendu de l'application. Ces éléments sont déployés sur Hosting et Cloud Functions for Firebase.
Déploiement personnalisé
La CLI Firebase suppose que vous avez défini une seule application dans votre fichier angular.json
avec une configuration de compilation de production.
Si vous devez adapter les hypothèses de la CLI, vous pouvez utiliser la variable d'environnement FIREBASE_FRAMEWORKS_BUILD_TARGET
ou ajouter AngularFire et modifier votre angular.json
:
{
"deploy": {
"builder": "@angular/fire:deploy",
"options": {
"version": 2,
"buildTarget": "OVERRIDE_YOUR_BUILD_TARGET"
}
}
}
(Facultatif) Intégrer le SDK JS Firebase
Lorsque vous incluez des méthodes du SDK JS Firebase dans les bundles serveur et client, protégez-vous contre les erreurs d'exécution en vérifiant isSupported()
avant d'utiliser le produit.
Tous les produits ne sont pas pris en charge dans tous les environnements.
Facultatif : intégrer le SDK Admin Firebase
Les bundles d'administration échoueront s'ils sont inclus dans la compilation de votre navigateur. Pensez donc à les fournir dans votre module de serveur et à 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 SSR
Facultatif : intégrer à Firebase Authentication
Les outils de déploiement Firebase compatibles avec les frameworks Web maintiennent automatiquement l'état du client et du serveur synchronisé à 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
). Cela peut être injecté dans votre module via le jeton REQUEST (exporté depuis @nguniversal/express-engine/tokens).