Con la CLI compatible con el marco de Firebase, puede implementar su aplicación Angular en Firebase y ofrecer contenido dinámico a sus usuarios.
Antes de que empieces
Antes de comenzar a implementar tu aplicación en Firebase, revisa los siguientes requisitos y opciones:
- Firebase CLI versión 12.1.0 o posterior. Asegúrese de instalar la CLI utilizando su método preferido.
Opcional: Facturación habilitada en tu proyecto de Firebase (obligatorio si planeas usar SSR)
Opcional: Fuego Angular
Inicializar base de fuego
Para comenzar, inicializa Firebase para tu proyecto marco. Utilice Firebase CLI para un proyecto nuevo o modifique firebase.json
para un proyecto existente.
Inicializar un nuevo proyecto
- En Firebase CLI, habilite la vista previa de los marcos web:
firebase experiments:enable webframeworks
Ejecute el comando de inicialización desde la CLI y luego siga las indicaciones:
firebase init hosting
Responda sí a "¿Quiere utilizar un marco web? (experimental)"
Elija su directorio de origen de alojamiento; Esta podría ser una aplicación Angular existente.
Si se le solicita, elija Angular.
Inicializar un proyecto existente
Cambie su configuración de alojamiento en firebase.json
para tener una opción source
, en lugar de una opción public
. Por ejemplo:
{
"hosting": {
"source": "./path-to-your-angular-workspace"
}
}
Servir contenido estático
Después de inicializar Firebase, puedes ofrecer contenido estático con el comando de implementación estándar:
firebase deploy
Contenido dinámico previo al renderizado
Para prerenderizar contenido dinámico en Angular, debe configurar Angular Universal. Firebase CLI espera Express Engine:
ng add @nguniversal/express-engine
Consulte la guía de Angular Universal para obtener más información.
Agregar URL de prerenderizado
De forma predeterminada, solo se prerenderizará el directorio raíz. Puede agregar rutas adicionales ubicando el paso previo a la renderización en angular.json
y agregando más rutas:
{
"prerender": {
"builder": "@nguniversal/builders:prerender",
"options": {
"routes": ["/", "ANOTHER_ROUTE", "AND_ANOTHER"]
},
"configurations": {
/* ... */
},
"defaultConfiguration": "production"
}
}
Firebase también respeta guessRoutes
o un archivo routes.txt
en la raíz del alojamiento, si necesita personalizarlo más. Consulte la guía de renderizado previo de Angular para obtener más información sobre esas opciones.
Opcional: agregue un módulo de servidor
Desplegar
Cuando implementas con firebase deploy
, Firebase crea tu paquete de navegador, tu paquete de servidor y preprocesa la aplicación. Estos elementos se implementan en Hosting y Cloud Functions para Firebase.
Implementación personalizada
Firebase CLI supone que tienes pasos de servidor, compilación y renderización previa en tus esquemas con una configuración de producción.
Si desea personalizar las suposiciones de la CLI, configure ng deploy
y edite la configuración en angular.json
. Por ejemplo, puede deshabilitar SSR y ofrecer contenido pre-renderizado exclusivamente eliminando serverTarget
:
{
"deploy": {
"builder": "@angular/fire:deploy",
"options": {
"browserTarget": "app:build:production",
"serverTarget": "app:server:production",
"prerenderTarget": "app:prerender:production"
}
}
}
Opcional: integración con Firebase JS SDK
Al incluir métodos del SDK de Firebase JS en paquetes de servidor y de cliente, protéjase contra errores de tiempo de ejecución marcando isSupported()
antes de usar el producto. No todos los productos son compatibles con todos los entornos .
Opcional: integración con el SDK de administración de Firebase
Los paquetes de administración fallarán si se incluyen en la compilación de su navegador, así que considere proporcionarlos en su módulo de servidor e inyectarlos como una dependencia opcional:
// 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');
Ofrezca contenido totalmente dinámico con SSR
Opcional: integrar con Firebase Authentication
Las herramientas de implementación de Firebase compatibles con el marco web mantienen sincronizados automáticamente el estado del cliente y del servidor mediante cookies. El objeto Express res.locals
contendrá opcionalmente una instancia de Firebase App autenticada ( firebaseApp
) y el usuario actualmente registrado ( currentUser
). Esto se puede inyectar en su módulo a través del token REQUEST (exportado desde @nguniversal/express-engine/tokens).