مدیریت وابستگی – انجمن DEV

این پست مدافعی برای مدیریت وابستگی های پروژه شما و اطمینان از به روز بودن آنهاست. به نظر می رسد این یک موضوع بحث برانگیز است، بنابراین من گمان می کنم که همه ما موافق نباشیم. من فکر می کنم این به تجربه شخصی شما بستگی دارد که چگونه می توانید وابستگی ها را ببینید.
در روزهای اولیه شغلی ام، زمانی که یک سوء استفاده امنیتی در یکی از آنها کشف شد، مجبور شدم با رفع وابستگی ها دست و پنجه نرم کنم. این یک درد واقعی بود، و من هرگز نمی خواستم آن را دوباره در آن شرایط تکرار کنم: فوق العاده استرس زا و حساس به زمان. بنابراین، من یک تصمیم قطعی گرفتم: به روز نگه داشتن وابستگی ها راهی بود که باید رفت.
برای استدلال قوی تر، قابلیت نگهداری کد را در وب سایت DORA بررسی کنید.
وابستگی پروژه چیست؟
یک وابستگی یا کتابخانه، اساساً کد شخص دیگری است. برای مثال، می توانید این را از طریق مدیر بسته زبان خود نصب کنید npm
(گره)، composer
(PHP)، یا pip
(پایتون).
این وابستگی احتمالاً به شما قابلیت هایی می دهد که نمی خواهید خودتان بنویسید. این می تواند به بزرگی یک فریمورک مانند React، Django یا Symfony باشد. یا، میتواند یک ابزار توسعهدهنده مانند یک کد، و همه چیز در میان باشد.
شما اساساً مسئولیت منطق را به پروژه یا مهندس دیگری برون سپاری می کنید تا یک قابلیت را برای شما انجام دهد. در بیشتر موارد، شما از طریق API عمومی یا قرارداد درون پروژه خود با آن تعامل خواهید داشت.
قبل از اینکه به افزودن وابستگی ها به پروژه خود ادامه دهید، ممکن است بخواهید در نظر بگیرید که بهتر است از یک پروژه شخص ثالث استفاده کنید یا خودتان آن را بنویسید. در حالی که نصب کتابخانه های دیگر در پروژه شما سریعتر است، در دراز مدت ممکن است پشتیبانی از آن سخت تر باشد. در ادامه به این موضوع می پردازیم.
پس چرا باید وابستگی ها را به روز نگه داریم؟
سوال درستی است برای من به صورت زیر تقسیم می شود:
امنیت – اگر یک وابستگی دارای یک سوء استفاده امنیتی است، میخواهید بتوانید آن را در اسرع وقت بهروزرسانی کنید. این برای اطمینان از اینکه پروژه شما در برابر حمله آسیب پذیر نیست. هر چه مدت بیشتری وابستگی را به زوال رها کنید، به روز رسانی آن دشوارتر خواهد بود. به عنوان مثال، اگر تغییرات عمدهای در نسخه وجود داشته باشد، ممکن است لازم باشد کد خود را تغییر دهید تا با نسخه جدید یکپارچه شود.
رفع اشکال – این احتمال وجود دارد که وابستگی شما توسط صاحبان پروژه کار شده باشد. درست مانند کد شما، کتابخانه ممکن است رفع اشکال داشته باشد و بهبود عملکرد اعمال شده باشد. برنامه شما می تواند از این تغییرات بهره مند شود.
بهبودها – شاید کتابخانه چند ویژگی جدید به آن اضافه کرده باشد که می تواند پروژه شما را بهبود بخشد. با به روز رسانی مکرر، مجموعه تغییراتی که باید درک کنید حداقل است. ممکن است بتوانید برای استفاده از ویژگیهای جدید، Refactorهای کوچکی را روی کد موجود خود انجام دهید.
سازگاری – اگر از کتابخانه ای استفاده می کنید که به روز نمی شود، ممکن است در موقعیتی قرار بگیرید که نتوانید وابستگی های دیگر را به روز کنید. این می تواند به این دلیل باشد که نسخه قدیمی کتابخانه دیگر با نسخه های جدیدتر وابستگی های دیگر سازگار نیست.
تعمیر و نگهداری – به روز رسانی منظم از انباشت بدهی فنی جلوگیری می کند و حفظ پروژه شما را در طولانی مدت آسان تر می کند.
چگونه وابستگی ها را به روز نگه داریم؟
ما در اینجا چند گزینه در دسترس داریم. همانطور که در بالا ذکر شد، واقعاً به این فکر کنید که آیا وابستگی لازم است یا خیر.
اگر واقعاً به این وابستگی نیاز دارید، می توانید وابستگی های خود را به صورت دستی به روز کنید یا می توانید فرآیند را خودکار کنید.
من توصیه می کنم فرآیند را خودکار کنید، که بار به روز نگه داشتن آنها را از بین می برد (تقریبا).
برخی از گزینه ها عبارتند از:
-
Dependabot – ساخته شده در مجموعه محصولات GitHub، این درخواست برای شما ایجاد می کند تا وابستگی های خود را به روز کنید.
-
Renovate – یک راه حل آگنوستیک فروشنده، که می تواند با GitHub، GitLab، Bitbucket و Azure DevOps استفاده شود.
من شخصا فقط تا به حال با Dependabot کار کرده ام و هیچ مشکلی با آن نداشته ام.
نمونه ای از شکل ظاهری یک پیکربندی ساده Dependabot به شرح زیر است. این کار شما را زیر نظر خواهد گرفت npm
وابستگی ها را بر اساس برنامه هفتگی انجام دهید و اگر وابستگی های شما قدیمی است، درخواست های جذب را برای شما افزایش دهید. اسناد را بررسی کنید تا ببینید آیا مخزن بسته شما پشتیبانی می شود یا خیر.
# .github/dependabot.yml
version: 2
updates:
# Maintain dependencies for npm
- package-ecosystem: 'npm'
directory: '/'
schedule:
interval: 'weekly'
commit-message:
prefix: 'npm'
با وجود اینکه وابستگی های خود را به روز می کنید، توصیه می کنم حداقل تغییرات را برای نسخه به روز شده مرور کنید. اتوماسیون فوقالعاده است، و شما میتوانید تمام تستهای خودکار خود را اجرا کنید و بدون دخالت انسان ادغام کنید. با این حال، زمینه را از دست می دهید. شما در مورد ویژگی ها و پیشرفت های جدید مطلع نخواهید شد مگر اینکه تغییرات را مرور کنید. همچنین این یک عادت خوب است که بدانید چه چیزی را در پروژه خود نصب می کنید.
خلاصه
در این پست، اهمیت مدیریت و به روز رسانی منظم وابستگی های پروژه شما را بررسی کردیم. به روز نگه داشتن وابستگی ها برای حفظ امنیت، رفع اشکالات، دسترسی به ویژگی های جدید، اطمینان از سازگاری و بهبود عملکرد بسیار مهم است. وابستگی های منسوخ شده می توانند به مسائل مهمی مانند آسیب پذیری های امنیتی، مشکلات سازگاری و بدهی های فنی منجر شوند.
من به شدت توصیه می کنم آنها را به روز کنید، و سپس فرآیند را برای به روز نگه داشتن آنها خودکار کنید. موفق باشید.
عکس مایک هیندل در Unsplash
همچنین ببینید