שימוש במונורפוס עם אירוח אפליקציות

בעזרת monorepos, אתם יכולים לארגן ולנהל כמה פרויקטים בספרייה אחת. במדריך הזה מוסבר איך מתחילים לפרוס אפליקציות מבוססות Turborepo או Nx באמצעות App Hosting.

פריסת מאגרי קוד מונו עם מסוף Firebase

התמיכה ב-Monorepo מוטמעת בתהליך ההגדרה של העורף הגרפי במסוף Firebase. כשמתבקשים לציין 'תיקיית שורש' בקטע 'הגדרות פריסה', מציינים את הנתיב לאפליקציה שרוצים לפרוס בתוך המאגר המשותף:

צילום מסך של תצוגת היצירה של הקצה העורפי של המסוף

פריסת מאגרי קוד מונו עם Firebase CLI

התמיכה ב-Monorepo מוטמעת בתהליך ההגדרה של הבק-אנד שמופעל על ידי פקודת ה-CLI‏ Firebaseapphosting:backends:create. אחרי שנכנסים לתהליך הזה ומציינים את המאגר הרצוי ב-GitHub, מוצגת בקשה לציין את תיקיית השורש של האפליקציה ביחס למאגר. בבקשה הזו, מעבירים את הנתיב לאפליקציה שרוצים לפרוס בתוך המאגר:

$ firebase apphosting:backends:create --project [project-name]
i  === Import a GitHub repository
✔  Connected with GitHub successfully

? Which GitHub repo do you want to deploy? gh-username/nx-monorepo
? Specify your app's root directory relative to your repository path/to/app

לדוגמה, אלה הנכסים שיפרסו בהינתן מבנה הפרויקט הבא ו-target-app כאפליקציה שרוצים ליצור ולפרוס:

Nx

.
    ├── libs
    ├── apps
    │   └── target-app
    │       ├── project.json
    │       └── src
    │           └── ...
    ├── nx.json
    ├── package-lock.json
    └── package.json

Turborepo

.
    ├── packages
    ├── apps
    │   └── target-app
    │       ├── package.json
    │       └── src
    │           └── ...
    ├── turbo.json
    ├── package.json
    └── package-lock.json

ספריית הבסיס של האפליקציה ביחס למאגר היא apps/target-app.

פתרון בעיות בפריסת monorepo

  • אם לא מציינים את השדה root directory (תיקיית שורש) עבור Nx, ה-build ייכשל ותוצג הודעה שבה מצוין שלא ניתן למצוא פרויקט לטירגוט בתוך מונוריפו Nx.App Hosting באופן דומה, משתמשי Turborepo צריכים לציין ספריית אפליקציה יעד כי אין ב-Turborepo מושג של פרויקט ברירת מחדל.
  • באפליקציות Nx + Angular, צריך להשתמש בכלי ליצירת אפליקציות Angular כדי ליצור את האפליקציה. ה-builder של אפליקציית Angular מצוין ב-project.json