כל מי שניהל אי פעם מונוריפו מכיר את הרגע המרגיז הזה. אתם דוחפים תיקון של שורה בודדת בחבילת התיעוד הפנימית, ותוך שניות מתחיל מצעד פריסות מיותר שמקפיץ התראות בכל הערוצים. פלטפורמת Vercel החליטה לטפל בחיכוך הזה.
לפי הודעת העדכון שפרסמה החברה ב-21 באוקטובר 2026, פריסות שהמערכת מדלגת עליהן באופן אוטומטי בתוך מונוריפו לא ייספרו יותר כנגד תקרות הפריסה שלכם. מפתחים שעובדים עם כמה אפליקציות בריפו אחד שרפו עד היום פריסות יקרות רק כי המערכת רשמה אירוע פריסה לכל פרויקט מקושר. עכשיו החישוב מתאפס לטובתכם.
זה שינוי קטן בחוקי החישוב, עם משמעות מיידית על התקציב של הצוות.
פחות קנסות על קומיט
פריסות ש-Vercel מדלגת עליהן אוטומטית במונוריפו אינן נספרות יותר מול מגבלות קצב הפריסה שלכם. צוותים עם מונוריפו מקבלים כעת יותר פריסות מאותן המגבלות בדיוק.Changelog רשמי
השינוי הזה מקבל משמעות כשבוחנים את המספרים היבשים. לפי דף המגבלות הרשמי, חשבון חינמי מסוג Hobby מוגבל ל-100 פריסות ביום, בעוד שמסלול Pro מספק 6000 פריסות יומיות. בנוסף, קיימת מגבלה על מספר הפרויקטים שניתן לחבר לאותו מאגר קוד: עד 25 פרויקטים בחשבון Hobby ועד 150 פרויקטים בחשבון Pro. אם המאגר שלכם כולל חמש אפליקציות שונות, כל דחיפה לקוד שרפה בעבר חמש פריסות מהמכסה היומית, גם אם נגעתם בקוד של שירות אחד בלבד. סטארטאפים רבים בישראל שמחזיקים כמה ממשקי Next.js בתוך מאגר משותף הגיעו לקצה המכסה מוקדם מדי ונאלצו לתכנן שדרוגים יקרים רק בגלל רישום טכני.
במסלול Hobby מקבלים מכסה חודשית מוגדרת לכל משאב הניתן לחיוב, בעוד שבמסלול Pro מקבלים קרדיט חודשי שמתקזז מול השימוש, ומעבר לו החברה גובה תשלום נוסף לפי דרישה. כעת, כשהדילוגים האוטומטיים אינם נגרעים מתקרת הפריסות היומית, אפשר לנצל את אותן מכסות עבור פריסות קוד אמיתיות בלי לחשוש מחסימות פתאומיות באמצע יום עבודה.
ההבדל בין דילוג להתעלמות
כאן מגיע המלכוד שרוב המפתחים מפספסים, והוא טמון בהבדל בין שני מנגנונים שונים שמתוארים בתוך דוקומנטציית המונוריפו. הפטור ממכסת הפריסות תקף אך ורק למנגנון הדילוג המובנה שנקרא skipping unaffected projects. המנגנון הזה נשען על ניתוח גרף התלויות וקובץ הנעילה באמצעות Turborepo, ויודע לקבוע מראש אם הפרויקט הושפע מהשינוי.
לפי הדוקומנטציה, Vercel מגדירה שפרויקט במונוריפו השתנה רק אם קוד המקור שלו השתנה, אם תלויות פנימיות שלו השתנו, או אם חל שינוי בקובץ הנעילה של מנהל החבילות שמשפיע אך ורק על התלויות של אותו פרויקט מסוים. אם אף אחד מהתנאים הללו לא התקיים, המערכת מדלגת על הפריסה מראש. היתרון הגדול הוא שהמנגנון המובנה אינו תופס תורי בנייה פעילים (concurrent build slots), ולכן הוא מקצר את זמני ההמתנה בתור.
לעומת זאת, צוותים רבים משתמשים בסקריפט ידני מסוג Ignored Build Step. לפי הדוקומנטציה, סקריפט מותאם אישית כזה תופס משאבי בנייה פעילים רק כדי להריץ פקודת bash ולעצור אותה. פריסות שנעצרות באמצעות סקריפט התעלמות אינן מוחרגות מהמכסות לפי ההודעה, והן ממשיכות להיספר במלואן כנגד המגבלה היומית שלכם. הפטור מספירת פריסות חל רק על מנגנון הדילוג האוטומטי של Turborepo, ולא על סקריפטים מותאמים אישית של התעלמות מבנייה.
| תכונה | דילוג מובנה (Skipping Unaffected) | סקריפט התעלמות (Ignored Build Step) |
|---|---|---|
| פטור מספירת פריסות יומית | כן, מלא | לא מוחרג בעדכון |
| תפיסת תורי בנייה פעילים | אינו תופס סלוטים | תופס סלוטים בזמן הרצת הסקריפט |
| מנוע זיהוי שינויים | גרף תלויות וקובץ נעילה של Turborepo | סקריפט Bash ידני שמחזיר קוד 0 או 1 |
| פלטפורמות Git נתמכות | GitHub בלבד | GitHub, GitLab, Bitbucket |
תנאי הסף שחייבים לבדוק
המנגנון האוטומטי לא יעבוד בכל פרויקט. בדוקומנטציה מפורטת רשימת דרישות קשיחה, והראשונה שבהן מגבילה את הפיצ'ר לפרויקטים שמחוברים למאגרי GitHub בלבד. אם קוד המקור שלכם יושב ב-GitLab או ב-Bitbucket, המערכת כלל לא תפעיל את הניתוח האוטומטי ותמשיך לנסות לבנות כל פרויקט.
בנוסף, הריפו חייב לפעול במבנה של workspaces לפי המוסכמות של עולם ה-JavaScript. המערכת תומכת בהגדרות של npm ו-yarn דרך מפתח workspaces בקובץ package.json, או בקובץ pnpm-workspace.yaml אם אתם עובדים עם pnpm, וכן ב-Bun. זיהוי מנהל החבילות מתבצע אוטומטית לפי קובץ הנעילה בשורש המאגר, או במפורש באמצעות שדה packageManager בקובץ package.json הראשי.
שני תנאים נוספים עוסקים בהגדרת החבילות: לכל חבילה בתוך ה-workspace חייב להיות שדה name ייחודי משלה, והתלויות בין החבילות חייבות להיות מוצהרות במפורש בכל package.json. אם תשנו קובץ כללי שלא שייך לאף workspace מוגדר, Vercel תסווג את האירוע כשינוי גלובלי ותפרוס את כל הפרויקטים במאגר ללא יוצא מן הכלל.
איך מדליקים את זה
בפרויקטים חדשים שמוקמים כעת בתוך מונוריפו, המנגנון מופעל כברירת מחדל.
בפרויקטים קיימים שבהם המנגנון כבוי, נכנסים לעמוד project's settings. תחת סעיף Root Directory מפעילים מחדש את מתג Skip deployment.
לא הייתי ממהר לבטל סקריפטים קיימים בלי לבדוק היטב את מבנה ה-package.json שלכם. תיקון קטן של הגדרת התלויות יאפשר לכם להישאר בתוך מכסת החבילה הקיימת בלי לשלם דולר אחד נוסף לחברה. השרתים כבר יחכו בסבלנות.
מקורות
- Skipped monorepo deployments no longer count against limitshttps://vercel.com/changelog/skipped-monorepo-deployments-no-longer-count-against-limits
- Using Monoreposhttps://vercel.com/docs/monorepos
- Limitshttps://vercel.com/docs/limits
- automatically skipshttps://vercel.com/docs/monorepos#skipping-unaffected-projects
- Turborepohttps://vercel.com/solutions/turborepo
- project's settingshttps://vercel.com/d?to=%2F%5Bteam%5D%2F%5Bproject%5D%2Fsettings%2Fbuild-and-deployment%23root-directory&title=Go+to+Build+and+Deployment+settings
- Vercelhttps://weba.co.il/tools/vercel/
הידיעה נכתבה מהמקורות שלמעלה בתאריך הפרסום, וכל טענה בה נבדקה מולם. מצאתם טעות? כתבו.