• בלוג
  • שידרוג תלויות לגירסה החדשה ביותר

שידרוג תלויות לגירסה החדשה ביותר

09/02/2021

פרויקטים רבים היום משתמשים בחבילות חיצוניות ובמיוחד בחבילות חיצוניות בקוד פתוח. בעבודה עם חבילות חיצוניות יש חשיבות לגירסאות ולמספרי הגירסה של אותן חבילות:

  1. אם יש תיקון אבטחה או תיקון באג קריטי שלא שובר שום דבר אחר אנחנו רוצים לקבל אותו אלינו למערכת

  2. אם יש שיפור שכולל שינוי ממשק או שינויים ששוברים קוד ישן, אנחנו עדיין רוצים לקבל אותו אלינו למערכת אבל בזהירות וכשיש לנו זמן.

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

מדי פעם (כן זה נדיר אני יודע) יהיו לנו כמה ימים בין פיצ'רים כדי לשדרג את כל התשתיות של הפרויקט. עבור הימים האלה ובעזרת כלים מיוחדים, תוכלו במכה אחת לשדרג את כל הספריות שיש להן גירסה ראשית חדשה, במכה אחת ולהכניס את עצמכם למערבולת של תיקונים והתאמות לעולם החדש. בואו נראה איך עושים את זה ב Ruby, Python ו Node.JS

1. שידרוג חבילות ב package.json עם ncu

הכלי הראשון נקרא ncu שזה קיצור ל npm-check-updates. כלי זה יראה לכם כל תלות של הפרויקט שקיימת לה גירסה חדשה יותר, גם אם השינוי "שובר" את נעילת החבילות של package.json. אחרי התקנת הכלי תוכלו להפעיל:

$ ncu -u

בתיקיה עם קובץ package.json והוא יעדכן את הקובץ לגירסאות החדשות ביותר של כל ספריה.

2. שידרוג חבילות ב requirements.txt עם pip-upgrader

הכלי pip-upgrader יעשה את אותו טריק אבל הפעם ב Python עם requirements.txt. אני אוהב להפעיל אותו עם האפשרות --skip-package-installation וכך הוא רק מעדכן את requirements.txt ואני יכול לבחור אחר כך אם להתקין או לו. אחרי התקנת הכלי עם pip פשוט נכנסים לתיקיה שיש בה פרויקט פייתון וקובץ requirements.txt ומפעילים:

$ pip-upgrade --skip-package-installation

בסיום בדיקה מול האינדקס הכלי ייתן לכם רשימה של חבילות הניתנות לשידרוג ויבקש מכם לבחור איזה חבילות אתם רוצים לשדרג (או אפשר לכתוב all כדי לשדרג את כולן).

3. שידרוג חבילות ב Gemfile עם bundleup

חבר אחרון הוא רובי ופה הכלי נקרא bundleup, וגם הוא עושה בדיוק מה שכתוב בתיאור - אתם מפעילים אותו בתיקיה עם קובץ Gemfile והוא ישדרג את כל הגירסאות ב Gemfile לגירסה החדשה ביותר של כל חבילה. לאחר התקנת הכלי עם gem נוכל לכתוב:

$ bundleup --update-gemfile

ולקבל Gemfile שמכוון לגירסאות החדשות ביותר של כל חבילה.

שימו לב- באנדלאפ לא מעדכן חבילות שיש עבורן Comment ב Gemfile. זה אומר שאם יש לכם שתי שורות כאלה:

# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
gem 'turbolinks', '~> 5'

אז הג'ם לא יעודכן. לא מצאתי דרך טובה להיפטר מההתנהגות הזאת ולכן בפרויקטים בהם אני משתמש ב bundleup אני מוחק את כל ההערות מה Gemfile לפני הפעלה.

מכירים כלים נוספים טובים יותר או בשפות אחרות? ספרו בתגובות שגם אחרים יוכלו להנות.