CLI ที่รับรู้เฟรมเวิร์ก Firebase ช่วยให้คุณสามารถทําให้แอปพลิเคชัน Angular ใช้งานได้ ใน Firebase และแสดงเนื้อหาแบบไดนามิกต่อผู้ใช้
ก่อนเริ่มต้น
ก่อนเริ่มใช้งานการติดตั้งใช้งานแอปใน Firebase โปรดอ่านข้อกำหนดและตัวเลือกต่อไปนี้
- Firebase CLI เวอร์ชัน 12.1.0 ขึ้นไป โปรดติดตั้ง CLI โดยใช้วิธีการที่ต้องการ
ไม่บังคับ: เปิดใช้การเรียกเก็บเงินในโปรเจ็กต์ Firebase (ต้องระบุหากวางแผนที่จะใช้ SSR)
ไม่บังคับ: AngularFire
เริ่มต้น Firebase
เริ่มต้นใช้งานโดยการเริ่มต้น Firebase สำหรับโปรเจ็กต์เฟรมเวิร์ก
ใช้ Firebase CLI สำหรับโปรเจ็กต์ใหม่ หรือแก้ไข firebase.json
สำหรับโปรเจ็กต์ที่มีอยู่
เริ่มต้นโปรเจ็กต์ใหม่
- ใน Firebase CLI ให้เปิดใช้ตัวอย่างเฟรมเวิร์กเว็บโดยทำดังนี้
firebase experiments:enable webframeworks
เรียกใช้คำสั่งเริ่มต้นจาก CLI แล้วทำตามข้อความแจ้ง
firebase init hosting
ตอบว่า "ใช่" สำหรับคำถาม "คุณต้องการใช้เฟรมเวิร์กเว็บไหม" (ทดลอง)"
เลือกไดเรกทอรีแหล่งที่มาของการโฮสต์ ซึ่งอาจเป็นแอป Angular ที่มีอยู่
หากได้รับข้อความแจ้ง ให้เลือก Angular
เริ่มต้นโปรเจ็กต์ที่มีอยู่
เปลี่ยนการกำหนดค่าการโฮสต์ใน firebase.json
เพื่อให้มีตัวเลือก source
แทนตัวเลือก public
เช่น
{
"hosting": {
"source": "./path-to-your-angular-workspace"
}
}
แสดงเนื้อหาแบบคงที่
หลังจากเริ่มต้น Firebase แล้ว คุณจะแสดงเนื้อหาแบบคงที่ได้ด้วยคำสั่งการติดตั้งใช้งานมาตรฐาน
firebase deploy
แสดงเนื้อหาแบบไดนามิกล่วงหน้า
หากต้องการแสดงผลเนื้อหาแบบไดนามิกใน Angular ล่วงหน้า คุณต้องตั้งค่า SSR ของ Angular
ng add @angular/ssr
ดูข้อมูลเพิ่มเติมได้ที่คู่มือการแสดงผลล่วงหน้า (SSG) ของ Angular
ไม่บังคับ: เพิ่มโมดูลเซิร์ฟเวอร์
ทำให้ใช้งานได้
เมื่อคุณทําการติดตั้งใช้งานด้วย firebase deploy
Firebase จะสร้างบิลด์เบราว์เซอร์
บิลด์เซิร์ฟเวอร์ และแสดงผลแอปพลิเคชันล่วงหน้า ระบบจะนำองค์ประกอบเหล่านี้ไปใช้กับ Hosting และ Cloud Functions for Firebase
การติดตั้งใช้งานที่กำหนดเอง
Firebase CLI จะถือว่าคุณมีแอปพลิเคชันเดียวที่กำหนดไว้ใน
angular.json
พร้อมการกำหนดค่าบิลด์ที่ใช้งานจริง
หากต้องการปรับสมมติฐานของ CLI คุณสามารถใช้
FIREBASE_FRAMEWORKS_BUILD_TARGET
ตัวแปรสภาพแวดล้อมหรือเพิ่ม
AngularFire แล้วแก้ไข
angular.json
ได้
{
"deploy": {
"builder": "@angular/fire:deploy",
"options": {
"version": 2,
"buildTarget": "OVERRIDE_YOUR_BUILD_TARGET"
}
}
}
ไม่บังคับ: ผสานรวมกับ Firebase JS SDK
เมื่อรวมเมธอด Firebase JS SDK ไว้ในทั้งแพ็กเกจเซิร์ฟเวอร์และไคลเอ็นต์ ให้ป้องกันข้อผิดพลาดรันไทม์โดยตรวจสอบ isSupported()
ก่อนใช้ผลิตภัณฑ์
ผลิตภัณฑ์บางอย่างไม่รองรับในบางสภาพแวดล้อม
ไม่บังคับ: ผสานรวมกับ Firebase Admin SDK
แพ็กเกจผู้ดูแลระบบจะทำงานไม่สำเร็จหากรวมไว้ในการสร้างเบราว์เซอร์ ดังนั้นโปรดพิจารณา ระบุแพ็กเกจในโมดูลเซิร์ฟเวอร์และแทรกเป็นทรัพยากร 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');
แสดงเนื้อหาแบบไดนามิกอย่างเต็มรูปแบบด้วย SSR
ไม่บังคับ: ผสานรวมกับการตรวจสอบสิทธิ์ Firebase
เครื่องมือการติดตั้งใช้งาน Firebase ที่รองรับเฟรมเวิร์กเว็บจะซิงค์สถานะไคลเอ็นต์
และเซิร์ฟเวอร์โดยอัตโนมัติโดยใช้คุกกี้ ออบเจ็กต์ Express res.locals
จะมีอินสแตนซ์แอป Firebase ที่ตรวจสอบสิทธิ์แล้ว (firebaseApp
) และ
ผู้ใช้ที่ลงชื่อเข้าใช้ในปัจจุบัน (currentUser
) โดยไม่บังคับ ซึ่งสามารถแทรกลงในโมดูลผ่านโทเค็นคำขอ (ส่งออกจาก @nguniversal/express-engine/tokens)