باستخدام واجهة برمجة التطبيقات (CLI) المتوافقة مع إطار عمل Firebase، يمكنك نشر تطبيق Angular في Firebase وعرض محتوى ديناميكي للمستخدمين.
قبل البدء
قبل بدء نشر تطبيقك على Firebase، راجِع المتطلبات والخيارات التالية:
- Firebase الإصدار 12.1.0 من واجهة برمجة التطبيقات أو الإصدارات الأحدث احرص على تثبيت واجهة سطر الأوامر باستخدام الطريقة المفضّلة لديك.
اختياري: تفعيل الفوترة في مشروعك على Firebase (مطلوب إذا كنت تخطّط لاستخدام ميزة "الاستجابة السريعة للطلبات")
اختياري: AngularFire
إعداد Firebase
للبدء، عليك إعداد Firebase لمشروع الإطار الأساسي.
استخدِم واجهة سطر أوامر Firebase لمشروع جديد، أو عدِّل firebase.json
لمشروع
حالي.
بدء مشروع جديد
- في Firebase CLI، فعِّل معاينة إطارات عمل الويب:
firebase experiments:enable webframeworks
شغِّل أمر الإعداد من وحدة التحكّم في سطر الأوامر، ثم اتّبِع التعليمات:
firebase init hosting
يجب الإجابة بـ "نعم" على السؤال "هل تريد استخدام إطار عمل ويب؟ (تجريبي)"
اختَر دليل مصدر الاستضافة، والذي يمكن أن يكون تطبيق Angular حاليًا.
اختَر Angular إذا طُلب منك ذلك.
بدء مشروع حالي
غيِّر إعدادات الاستضافة في firebase.json
للحصول على خيار source
بدلاً من خيار public
. على سبيل المثال:
{
"hosting": {
"source": "./path-to-your-angular-workspace"
}
}
عرض محتوى ثابت
بعد إعداد Firebase، يمكنك عرض محتوى ثابت باستخدام الأمر العادي deployment:
firebase deploy
معالجة المحتوى الديناميكي مسبقًا
لعرض المحتوى الديناميكي مسبقًا في Angular، عليك إعداد Angular Universal. تتوقّع واجهة سطر أوامر Firebase أن ينفّذ محرّك Express ما يلي:
ng add @nguniversal/express-engine
اطّلِع على دليل Angular Universal لمزيد من المعلومات.
إضافة عناوين URL لميزة "العرض المُسبَق"
سيتم تلقائيًا عرض الدليل الجذر فقط مسبقًا. يمكنك إضافة مسارات إضافية
عن طريق تحديد خطوة التقديم المُسبَق في angular.json
وإضافة المزيد من المسارات:
{
"prerender": {
"builder": "@nguniversal/builders:prerender",
"options": {
"routes": ["/", "ANOTHER_ROUTE", "AND_ANOTHER"]
},
"configurations": {
/* ... */
},
"defaultConfiguration": "production"
}
}
تلتزم Firebase أيضًا بملف guessRoutes
أو routes.txt
في جذر الاستضافة،
إذا كنت بحاجة إلى إجراء المزيد من التخصيص. اطّلِع على دليل المعالجة المسبقة في Angular للحصول على مزيد من المعلومات عن هذين الخيارين.
اختياري: إضافة وحدة خادم
النشر
عند نشر التطبيق باستخدام firebase deploy
، تنشئ Firebase حِزمة المتصفّح
وحِزمة الخادم، وتعرض التطبيق مسبقًا. يتم نشر هذه العناصر
في Hosting وCloud Functions for Firebase.
النشر المخصّص
تفترض أداة Firebase CLI أنّ لديك خطوات الخادم والإنشاء والعرض المُسبَق في مخطّطاتك باستخدام إعدادات الإنتاج.
إذا كنت تريد تخصيص افتراضات واجهة برمجة التطبيقات، اضبط ng deploy
وعدِّل الإعدادات في angular.json
. على سبيل المثال، يمكنك إيقاف ميزة "العرض المباشر من الخادم" وعرض
المحتوى الذي تمّت معالجته مسبقًا فقط عن طريق إزالة serverTarget
:
{
"deploy": {
"builder": "@angular/fire:deploy",
"options": {
"browserTarget": "app:build:production",
"serverTarget": "app:server:production",
"prerenderTarget": "app:prerender:production"
}
}
}
اختياري: دمج حزمة تطوير البرامج (SDK) لبرنامج Firebase باستخدام JavaScript
عند تضمين طرق حزمة تطوير البرامج (SDK) لـ Firebase JS في حِزم الخادم والعميل، احرِص على تجنُّب أخطاء وقت التشغيل من خلال التحقّق من isSupported()
قبل استخدام المنتج.
لا تتوفّر بعض المنتجات في جميع البيئات.
اختياري: الدمج مع حزمة "مدير SDK في Firebase"
لن تعمل حِزم المشرف إذا تم تضمينها في إصدار المتصفّح، لذا ننصحك بتقديمها في وحدة الخادم وحقنها كتبعية اختيارية:
// 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');
عرض محتوى ديناميكي بالكامل باستخدام ميزة "العرض من جهة الخادم"
اختياري: الدمج مع Firebase Authentication
تحافظ أدوات نشر Firebase المتوافقة مع إطار عمل الويب تلقائيًا على مزامنة حالة العميل
والخادم باستخدام ملفات تعريف الارتباط. سيحتوي عنصر Express res.locals
اختياريًا على مثيل تطبيق Firebase تمّت مصادقته (firebaseApp
)
والمستخدم الذي سجّل الدخول حاليًا (currentUser
). ويمكن إدخال هذا العنصر في
الوحدة من خلال رمز REQUEST (الذي تمّ تصديره من @nguniversal/express-engine/tokens).