من خلال إجراء بعض عمليات الضبط الإضافية، يمكنك الاستفادة من وظائف CLI الأساسية المراعية لإطار العمل لتوسيع نطاق دعم الدمج ليشمل أُطر عمل أخرى غير Angular وNext.js.
قبل البدء
قبل بدء نشر تطبيقك على Firebase، راجِع المتطلبات والخيارات التالية:
- Firebase الإصدار 12.1.0 من واجهة برمجة التطبيقات أو الإصدارات الأحدث احرص على تثبيت واجهة سطر الأوامر باستخدام الطريقة المفضّلة لديك.
- اختياري: تفعيل الفوترة في مشروع Firebase (مطلوب إذا كنت تخطط لاستخدام SSR)
إعداد Firebase
للبدء، عليك إعداد Firebase لمشروع إطار العمل.
استخدِم واجهة سطر أوامر Firebase لمشروع جديد، أو عدِّل firebase.json
لمشروع
حالي.
بدء مشروع جديد
- في Firebase CLI، فعِّل معاينة إطارات عمل الويب:
firebase experiments:enable webframeworks
شغِّل أمر الإعداد من وحدة التحكّم في سطر الأوامر، ثم اتّبِع التعليمات:
firebase init hosting
يجب الإجابة بـ "نعم" على السؤال "هل تريد استخدام إطار عمل ويب؟ (تجريبي)"
اختَر دليل مصدر الاستضافة، والذي يمكن أن يكون تطبيق ويب حاليًا.
اختَر Express.js / مخصّص إذا طُلب منك ذلك.
بدء مشروع حالي
غيِّر إعدادات الاستضافة في firebase.json
للحصول على خيار source
بدلاً من خيار public
. على سبيل المثال:
{
"hosting": {
"source": "./path-to-your-express-directory"
}
}
عرض محتوى ثابت
قبل نشر محتوى ثابت، عليك ضبط إعدادات تطبيقك.
الضبط
لمعرفة كيفية نشر تطبيقك، يجب أن يكون Firebase CLI قادرًا على
إنشاء تطبيقك ومعرفة مكان وضع أدواتك لملفات الأصول
المخصّصة لـ Hosting. ويتم ذلك باستخدام نص npm البرمجي وتوجيه CJS
directories في package.json
.
في ما يلي ملف package.json:
{
"name": "express-app",
"version": "0.0.0",
"scripts": {
"build": "spack",
"static": "cp static/* dist",
"prerender": "ts-node prerender.ts"
},
…
}
لا تستدعي أداة Firebase CLI سوى نصّ إنشاء التطبيق، لذا عليك التأكّد من أنّ نصّ إنشاء التطبيق شامل.
{
"name": "express-app",
"version": "0.0.0",
"scripts": {
"build": "spack && npm run static && npm run prerender",
"static": "cp static/* dist",
"prerender": "ts-node prerender.ts"
},
…
}
إذا كان إطار العمل لا يتيح المعالجة المسبقة بشكل تلقائي، ننصحك باستخدام أداة مثل Rendertron. سيسمح لك Rendertron بإجراء طلبات Chrome بلا واجهة مستخدم رسومية ضد مثيل محلي من تطبيقك، حتى تتمكّن من حفظ محتوى HTML الناتج ليتم عرضه على Hosting.
أخيرًا، تخزِّن أُطر العمل وأدوات الإنشاء المختلفة العناصر في
أماكن مختلفة. استخدِم directories.serve
لإعلام وحدة التحكم في الخطوط لتحديد المكان الذي يُخرج فيه نصّ الإنشاء
العناصر الناتجة:
{
"name": "express-app",
"version": "0.0.0",
"scripts": {
"build": "spack && npm run static && npm run prerender",
"static": "cp static/* dist",
"prerender": "ts-node prerender.ts"
},
"directories": {
"serve": "dist"
},
…
}
النشر
بعد ضبط تطبيقك، يمكنك عرض محتوى ثابت باستخدام أمر النشر العادي:
firebase deploy
عرض محتوى ديناميكي
لعرض تطبيق Express على Cloud Functions for Firebase، تأكَّد من تصدير تطبيق Express (أومعالج عنوان URL بأسلوب Express) بطريقة يمكن أن يعثر عليها Firebase بعد تجميع مكتبتك باستخدام npm.
لتنفيذ ذلك، تأكَّد من أنّ توجيه files
يتضمّن كل ما هو مطلوب للخادم، ومن إعداد نقطة الإدخال الرئيسية بشكل صحيح في package.json
:
{
"name": "express-app",
"version": "0.0.0",
"scripts": {
"build": "spack && npm run static && npm run prerender",
"static": "cp static/* dist",
"prerender": "ts-node tools/prerender.ts"
},
"directories": {
"serve": "dist"
},
"files": ["dist", "server.js"],
"main": "server.js",
...
}
تصدير تطبيقك السريع من دالة باسم app
:
// server.js
export function app() {
const server = express();
…
return server;
}
أو إذا كنت تفضّل تصدير معالِج عنوان URL بأسلوب سريع، يمكنك تسميته handle
:
export function handle(req, res) {
res.send(‘hello world’);
}
النشر
firebase deploy
يؤدي ذلك إلى نشر المحتوى الثابت في Firebase Hosting والسماح لـ Firebase بالرجوع إلى تطبيق Express المستضاف على Cloud Functions for Firebase.
اختياري: الدمج مع Firebase Authentication
ستحافظ أدوات نشر Firebase المتوافقة مع إطار عمل الويب تلقائيًا على مزامنة حالة العميل
والخادم باستخدام ملفات تعريف الارتباط. للوصول إلى سياق المصادقة، يحتوي res.locals
عنصر Express اختياريًا على مثيل تطبيق Firebase مصادقة (firebaseApp
) والمستخدم الذي سجّل الدخول حاليًا (currentUser
).