בעזרת הגדרות נוספות, תוכלו להשתמש בפונקציות הבסיסיות של CLI שתומכות במסגרות כדי להרחיב את תמיכת השילוב למסגרות אחרות מלבד Angular ו-Next.js.
לפני שמתחילים
לפני שמתחילים לפרוס את האפליקציה ב-Firebase, כדאי לעיין בדרישות ובאפשרויות הבאות:
- Firebase CLI בגרסה 12.1.0 ואילך. חשוב להתקין את ה-CLI בשיטה המועדפת עליכם.
- אופציונלי: צריך להפעיל חיוב בפרויקט Firebase (חובה אם אתם מתכננים להשתמש ב-SSR)
איך מפעילים את Firebase
כדי להתחיל, צריך לאתחל את Firebase לפרויקט של המסגרת.
משתמשים ב-CLI של Firebase לפרויקט חדש, או משנים את firebase.json
לפרויקט קיים.
איך מפעילים פרויקט חדש
- מפעילים את התצוגה המקדימה של מסגרות האינטרנט ב-CLI של Firebase:
firebase experiments:enable webframeworks
מריצים את פקודת האיפוס מה-CLI ופועלים לפי ההנחיות:
firebase init hosting
עונים 'כן' לשאלה 'האם ברצונך להשתמש במסגרת אינטרנט? (ניסיוני)'
בוחרים את ספריית המקור של המארח. יכולה להיות זו אפליקציית אינטרנט קיימת.
אם מוצגת בקשה, בוחרים באפשרות Express.js / custom
איך מפעילים פרויקט קיים
משנים את הגדרת האירוח ב-firebase.json
כך שתכלול אפשרות source
במקום אפשרות public
. לדוגמה:
{
"hosting": {
"source": "./path-to-your-express-directory"
}
}
הצגת תוכן סטטי
לפני פריסת תוכן סטטי, צריך להגדיר את האפליקציה.
הגדרה
כדי לדעת איך לפרוס את האפליקציה, ל-CLI של Firebase צריכה להיות אפשרות גם ליצור גרסת build של האפליקציה וגם לדעת איפה הכלים שלכם מניחים את הנכסים שמיועדים ל-Hosting. כדי לעשות זאת, משתמשים בסקריפט ה-build של npm ובהוראת הספריות של CJS ב-package.json
.
בהתאם לקובץ package.json הבא:
{
"name": "express-app",
"version": "0.0.0",
"scripts": {
"build": "spack",
"static": "cp static/* dist",
"prerender": "ts-node prerender.ts"
},
…
}
ה-CLI של Firebase קורא רק לסקריפט ה-build, לכן צריך לוודא שהוא מקיף.
{
"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 ללא ממשק משתמש (headless) כנגד מכונה מקומית של האפליקציה, כדי שתוכלו לשמור את קובץ ה-HTML שנוצר ולהציג אותו ב-Hosting.
לבסוף, כלים שונים ל-build ותבניות שונות לאחסון אובייקטים שונים. משתמשים ב-directories.serve
כדי להורות ל-CLI לאן סקריפט ה-build מפיק את הארטיפקטים:
{
"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",
...
}
מייצאים את אפליקציית Express מפונקציה בשם app
:
// server.js
export function app() {
const server = express();
…
return server;
}
לחלופין, אם רוצים לייצא בורר כתובות URL בסגנון Express, נותנים לו את השם handle
:
export function handle(req, res) {
res.send(‘hello world’);
}
כלים לפריסה
firebase deploy
הפעולה הזו פורסת את התוכן הסטטי ב-Firebase Hosting ומאפשרת ל-Firebase לעבור לאפליקציית Express שמתארחת ב-Cloud Functions for Firebase.
אופציונלי: שילוב עם אימות ב-Firebase
כלי הפריסה של Firebase, שמכירים את מסגרת האתר, ינעלו באופן אוטומטי את המצב של הלקוח והשרת באמצעות קובצי cookie. כדי לגשת להקשר האימות, אובייקט res.locals
ב-Express מכיל, אם רוצים, מופע מאומת של אפליקציית Firebase (firebaseApp
) ואת המשתמש שמחובר כרגע (currentUser
).