WEBA

Vercel מפסיקה לספור פריסות על פרויקטים שלא נגעתם בהם

עדכון במדיניות המכסות של Vercel מוציא דילוגים אוטומטיים במונוריפו מספירת הפריסות היומית, אבל רק אם אתם עומדים בדרישות של GitHub ו-Turborepo.

628 מילים27 עובדות אומתו

כל מי שניהל אי פעם מונוריפו מכיר את הרגע המרגיז הזה. אתם דוחפים תיקון של שורה בודדת בחבילת התיעוד הפנימית, ותוך שניות מתחיל מצעד פריסות מיותר שמקפיץ התראות בכל הערוצים. פלטפורמת 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, ולא על סקריפטים מותאמים אישית של התעלמות מבנייה.

השוואה בין מנגנוני מניעת בנייה במונוריפו של Vercel
תכונהדילוג מובנה (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 שלכם. תיקון קטן של הגדרת התלויות יאפשר לכם להישאר בתוך מכסת החבילה הקיימת בלי לשלם דולר אחד נוסף לחברה. השרתים כבר יחכו בסבלנות.

מה לעשות עכשיובדקו בהגדרות הפרויקט ב-Vercel שמנגנון Skip deployment מופעל ושהתלויות ב-package.json מוצהרות נכון כדי לחסוך שריפת מכסות.

מקורות

הידיעה נכתבה מהמקורות שלמעלה בתאריך הפרסום, וכל טענה בה נבדקה מולם. מצאתם טעות? כתבו.

מה שואלים על זה

האם הפטור מספירת פריסות תקף גם למשתמשים במסלול חינמי (Hobby)?

כן, לפי הודעת העדכון הפטור ממגבלות קצב הפריסה חל באופן גורף על כלל הצוותים והמשתמשים שמנהלים מונוריפו, כולל מגבלת 100 הפריסות היומית בחשבונות Hobby.

האם המנגנון עובד עם מאגרי קוד ב־GitLab או Bitbucket?

לא. לפי דוקומנטציית הדרישות הרשמית של Vercel, מנגנון הדילוג האוטומטי על פרויקטים שלא הושפעו נתמך רק בפרויקטים המחוברים למאגרי GitHub.

איך המערכת מזהה אילו פרויקטים במונוריפו הושפעו מהקומיט האחרון?

Vercel משתמשת בניתוח גרף החבילות וקובצי הנעילה (lockfile) של Turborepo כדי לבדוק האם שונו קובצי המקור של הפרויקט, תלויות פנימיות שלו, או חבילות חיצוניות שמשפיעות עליו בלבד.

מה קורה אם שיניתי קובץ שלא מוגדר בתוך ה־Workspaces?

שינויים בקבצים שאינם חלק מהגדרת ה-workspaces נחשבים על ידי Vercel כשינויים גלובליים, ויגרמו לפריסה מחדש של כל האפליקציות המחוברות בריפו ללא דילוג.