مقدمه
آیا می دانید پکیج منیجر چیست؟ پکیج منیجر به مجموعهای از ابزارهای نرم افزاری گفته میشود که برای نصب، به روز رسانی، ارتقاء، سفارشی سازی و حذف برنامههای کامپیوتری در سیستم عامل استفاده میشود. مدیر بسته معمولا شامل پایگاه دادهای حاوی نسخه بسته نرم افزاری و وابستگیهای آن میباشد. این بستهها علاوه بر نرمافزارها، برنامههای کاربردی و دادهها اطلاعات دیگری بنام متادیتا نیز دارند که شامل نام نرمافزار، اطلاعاتی در خصوص وظایف نرمافزار، شرکت سازنده، وابستگیهای نرمافزار و … است که بعد از نصب نرمافزار و راه اندازی آن در پایگاه داده سیستم ذخیره میشود.
هدف از طراحی پکیج منجیر چیست؟
پکیج منیجر با این هدف طراحی شده است که از زمان و سرمایه سازمانها بهرهبرداری درستی صورت بگیرد. این بدان معناست که با استفاده از پکیج منیجر بصورت مدیریت از راه دور میتوانید تمام مراحل مربوط به توزیع و نصب نرمافزارها را کنترل و مدیریت کنید. در این صورت دیگر نیازی به نصب و به روزرسانی دستی نیست. این روش برای شرکتهای بزرگی که از سیستم عاملهای لینوکس و یونیکس استفاده میکنند که شامل هزاران بسته نرمافزاری هستند بسیار مناسب است. همچنین وجود پکیج منیجرها برای طراحی سایت اختصاصی نیز کمک بزرگی میکند.
شاید این سوال به ذهنتان خطور کند که مشکل نصب و بروزرسانی دستی چیست و مدیریت بسته یا همان Package Manager الزامی است؟ خب همانطور که گفتیم پکیج منیجر، بسته نرمافزاری است و در سیستم عامل نصب شده و وظایفی را انجام میدهد. اگر از ابتدا شروع کنیم، ما برای انجام کارهای نرمافزاری به یک سیستم سختافزاری یا همان کامپیوتر نیاز داریم. کامپیوترها اطلاعات را پردازش میکنند و یک خروجی به ما میدهند. کامپیوتر برای پردازش اطلاعات در ابتدا نیاز به جریان برق دارد تا روشن شود همچنین به فضای ذخیرهسازی نیاز دارد تا اطلاعات را بر روی آن ذخیره کند و یک برنامه پردازش هم لازم دارد تا این اطلاعات را پردازش کند.
اینها پیش نیازهای کامپیوتر بود در مرحله بعد باید ببینم اطلاعات هم پیشنیازی دارد یا خیر. بله اطلاعات نیز نیاز به پیش نیاز دارد، در ابتدا اطلاعات نیاز دارد تا در یک فضایی ذخیره شود که همان هارد دیسک است ولی به نظرتان اطلاعات چگونه روی هارد قرار میگیرد؟ اطلاعات برای ذخیره شدن روی هارد باید قالب قابل قبولی داشته باشد تا برنامه بتواند آن را پردازش کند. و اما برنامهای که برای پردازش لازم است نیز باید پیشنیازهایی را تامین کند تا بتواند عملیات پردازش را انجام دهد. برنامهها در ابتدا به فضای ذخیره سازی نیاز دارند که همان هارد دیسک است اما علاوه بر آن پیش نیازهای دیگری نیز دارند:
- برنامه به اطلاعاتی در قالب مناسب ، نامگذاری مناسب و محل مناسب در سیستم نیاز دارد.
- برنامه به یک سری فایل پیکربندی بنام کانفیگ فایل نیاز دارد. این فایلها رفتار برنامه را کنترل میکنند که باید قالب مناسب و تعریف شدهای داشته باشند.
- خود برنامه نیز باید قالب و نامگذاری مناسبی داشته باشد و بر روی هارد دیسک قرار گرفته باشد.
خب برنامه یا همان نرم افزار را تا اینجای کار متوجه شدیم که چیست. برخی از این برنامه ها در کنار خود مستنداتی دارند که برای راحتی کار و به عنوان راهنما در کنار برنامه ارائه میشود.
اگر بخواهیم یک برنامه را بصورت دستی نصب کنیم باید ابتدا مستندات برنامه را مطالعه کنید سپس فایل برنامه را به همراه مستندات و کانفیگ فایل روی کامپیوتر کپی کنید و نامگذاری مناسبی هم برای آن انجام دهید و تغییرات مورد نظرتان را روی فایل کانفیک انجام دهید و در انتها برنامه را نصب کنید. فرایند نصب توسط کامپیوتر انجام میشود. حال تصور کنید در یک سیستم عامل لینوکس هزاران برنامه باید نصب شود و تمام این کارها باید برای هر کدام آنها تکرار شود که بسیار کار زمان بر و سختی است.
حال تصور کنید برنامهها اگر نیاز به روزرسانی هم پیدا کنند شرایط چقدر سختتر خواهد شد و بسیار هزینه بردار و زمانبر خواهد شد. راه دومی هم وجو دارد و آن این است که تمام این کارها را به عهده کامپیوتر بگذارید و خیالتان راحت باشد که همه کارها به خوبی انجام میشود. خودتان قضاوت کنید کدام راه بهتر است؟ البته که راه دوم بسیار بهتر و بهینه تر است. Package Manager نیز دقیقا همین کار را انجام میدهد و تمام فایلهای موجود در سیستم را مدیریت میکند. تمام محتویات یک بسته یا همان Package دارای نامگذاری مشخص است.
یک Package Manager تمام فایلهای مرتبط با برنامه از جمله خود برنامه، مستندات برنامه، دادههای برنامه و کانفیگ فایلهای برنامه را در یک قالب مشخص بسته بندی میکند. این مسئله باعث میشود روند نصب و اجرا و حذف و آپدیت و هر تغییری که بخواهیم روی یک برنامه انجام دهیم بدون مشکل انجام شود و چیزی اضافه یا کم نشود. مزیت بزرگی که یک Package دارد این است که دقیقا می داند برای نصب کردن یک نرم افزار چه مراحلی را انجام داده است و همه آنها را مستند میکند.
تا اینجای کار تا حدودی متوجه شدید که Package Manager ها چقدر کار را آسان کردهاند و شرکتهای بزرگ تا چه حدی در میزان حجم کاری و زمان و هزینه صرفه جویی میکنند.
بنابراین بصورت خلاصه Package Manager ها برای ما برنامه ها را به همراه همه فایل های جانبی آنها در کنار هم قرار میدهند و یک بسته کامل نرمافزاری به نام Package ارائه می کنند ،Package Manager میتواند فرآیند نصب ، بروز رسانی ، حذف و … را بصورت جامع و کامل بدون نیاز به درگیر کردن کاربر برای هزاران نرم افزار نصب شده انجام دهد.

انواع Package Manager
Package Managerها انواع مختلفی دارند و برای سیستم عاملهای مختلف نیز متفاوت است. در اینجا به چند مورد اشاره میکنیم.
RPM Package Manager
این ابزار عموماً در توزیعهای گنو/ لینوکسی مبتنی بر RPM مانند SuSE و redhat مورد استفاده قرار میگیرد و با ایجاد یک پایگاه داده از بستههایی که نصب شدهاند اقدام به مدیریت هر یک از بستهها جهت به روزرسانی، حذف و نصب آنها میکند که پسوند آنها rpm.* است.
Npm Package Manager
برای اینکه بتوانید اپلیکیشنهای جاوا اسکریپتی در سمت سرور بسازید باید از node.js استفاده کنید. شما برای اینکه بتوانید از امکانات نودجیاس بهره ببرید باید یک پکیج منیجر را برای دریافت و استفاده از ابزارها داشته باشید. اینجا درست جائیست که npm وارد میشود. با استفاده از npm شما میتوانید ابزارهایی که برای کارتان نیاز دارید را به سادگی نصب کنید و آنها را در اختیار داشته باشید. در حال حاضر محبوبترین package manager در دنیای جاوا اسکریپت npm هستش که بیش از 300,000 بسته در اون ثبت شده و ۵ میلیون کاربر از اون استفاده میکنند که چیزی حدود ۵ میلیارد بار دانلود در ماه انجام میدهند.
YARN Package Manager
زمانی که پروژهها خیلی بزرگ شوند به طبع کدها زیاد میشوند و این مسئله باعث بروز مشکلاتی در زمینه ثبات، امنیت و بازده کار در npm میشود. مهندسان فیسبوک با همکاری شرکتهای دیگهای مثل Google، Exponent و Tilde یک پکیج منیجر به نام yarn را توسعه دادند که با نصب آن به تمام بستههای npm دسترسی دارید و در عین حال سرعت، امنیت و ثبات بیشتری را در پروژههایتان خواهید داشت. در واقع این پکیج منیجر یک جایگزین مناسب برای npm است.

سخن پایانی
در این مقاله سعی کردیم شما را با مفهوم پکیج منیجر آشنا کنیم و چند نمونه از انواع آن را معرفی کنیم.