With the Firebase framework-aware CLI, you can deploy your Angular application to Firebase and serve dynamic content to your users.
Before you begin
Before you get started deploying your app to Firebase, review the following requirements and options:
- Firebase CLI version 12.1.0 or later. Make sure to install the CLI using your preferred method.
-  Optional: Billing enabled on your Firebase project (required if you plan to use SSR) 
-  Optional: AngularFire 
Initialize Firebase
To get started, initialize Firebase for your framework project.
Use the Firebase 
CLI for a new project, or modify firebase.json 
for an
existing project.
Initialize a new project
- In the Firebase 
CLI, enable the web frameworks preview: firebase experiments:enable webframeworks 
-  Run the initialization command from the CLI and then follow the prompts: firebase init hosting 
-  Answer yes to "Do you want to use a web framework? (experimental)" 
-  Choose your hosting source directory; this could be an existing Angular app. 
-  If prompted, choose Angular. 
Initialize an existing project
Change your hosting config in firebase.json 
to have a source 
option, rather
than a public 
option. For example:
  { 
  
 "hosting" 
 : 
  
 { 
  
 "source" 
 : 
  
 "./path-to-your-angular-workspace" 
  
 } 
 } 
 
 
Serve static content
After initializing Firebase, you can serve static content with the standard deployment command:
 firebase  
deploy 
 
Pre-render dynamic content
To prerender dynamic content in Angular, you need to set up Angular SSR.
 ng  
add  
@angular/ssr 
 
See the Angular Prerendering (SSG) guide for more information.
Optional: add a server module
Deploy
When you deploy with firebase deploy 
, Firebase builds your browser bundle,
your server bundle, and prerenders the application. These elements are deployed
to Hosting 
and Cloud Functions for Firebase 
.
Custom deploy
The Firebase 
CLI assumes that you have a single application defined in your angular.json 
with a production build configuration.
If need to tailor the CLI's assumptions, you can either use the FIREBASE_FRAMEWORKS_BUILD_TARGET 
environment variable or add AngularFire 
and modify your angular.json 
:
  { 
  
 "deploy" 
 : 
  
 { 
  
 "builder" 
 : 
  
 "@angular/fire:deploy" 
 , 
  
 "options" 
 : 
  
 { 
  
 "version" 
 : 
  
 2 
 , 
  
 "buildTarget" 
 : 
  
 "OVERRIDE_YOUR_BUILD_TARGET" 
  
 } 
  
 } 
 } 
 
 
Optional: integrate with the Firebase JS SDK
When including Firebase JS SDK methods in both server and client bundles, guard
against runtime errors by checking isSupported() 
before using the product.
Not all products are supported in all environments 
.
Optional: integrate with the Firebase Admin SDK
Admin bundles will fail if they are included in your browser build, so consider providing them in your server module and injecting as an optional dependency:
  // 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' 
 ); 
 
 
Serve fully dynamic content with SSR
Optional: integrate with Firebase Authentication
The web framework-aware Firebase deployment tooling automatically keeps client
and server state in sync using cookies. The Express res.locals 
object will
optionally contain an authenticated Firebase App instance ( firebaseApp 
) and
the currently signed in user ( currentUser 
). This can be injected into your
module via the REQUEST token (exported from @nguniversal/express-engine/tokens).

