سلام بر شما دوستان خوبم در آموزشگاه تراشه , امروز قراره که در مورد این صحبت کنیم که اصلا پکیج منیجر ها چی هستند و برای چه کسانی مناسب هستند ؟ و به این پاسخ دهیم که تفاوت NPM و YARN چیست ؟
با آموزشگاه تراشه همراه باشید.
پکیج منیجر چیست ؟
سال ها پیش برنامه نویسی به گونهای بود که شما با یک زبان شروع به برنامه نویسی میکردید و اگر لازم بود از فریمورک هایی استفاده کنید آن را تهیه میکردید و به پروژه خود اضافه میکردید و به کار خود ادامه می دادید. اما رفتهرفته استفاده از فریمورک های خارج از پروژه بیشتر رایج شد و به همین شکل سورس ها و کتابخانههای رایگان در اینترنت بیشتر شد. به همین دلیل در اکثر زبانهای برنامه نویسی این نیاز به وجود آمد که ابزاری نوشته شود که فریمورک ها را مدیریت و نصب کند و برنامه نویس دیگر درگیر دانلود و نصب کتابخانهها نباشد . در حین کار با فریم ورک های جاوا اسکریپتی به کتابخانه ها و رفرنس های زیادی نیاز می باشد که اگر پروژه شما قدری بزرگ باشد مدیریت و نصب این پکیج ها بسیار سخت خواهد شد. پکیج منیجر ها روشی را ارائه می کنند که توسط آنها مدیریت پکیج ها اتوماسیونی می شود یا به عبارتی عملیات خودکارسازی پروسه ی نصب، به روز رسانی، پیکربندی و حذف قطعات نرم افزاری (پکیج ها) از یک رجیستری جهانی به سادگی در پروژه شما انجام می پذیرد .
به صورت خلاصه برایتان بگویم که package manager ها روشی برای اتوماسیون و خودکارسازی پروسه نصب، به روز رسانی، پیکربندی و حذف قطعات نرم افزاری (پکیج ها) از یک رجیستری جهانی هستند.
پکیج منیجر NPM چیست ؟
npm یا node package manager مدیریت کننده پکیج های nodejs به صورت پیش فرض می باشد. چون همانطوری که می دانید برای کار با React.js باید حتما نود جی اس روی سیستم شما نصب باشد . شما می توانید از طریق client به این رجیستری دسترسی داشته باشید و از بین هزاران پکیج موجود در آن انتخاب کنید . کار کردن با npm به صورت Command-line یا خط فرمان می باشد و از طریق آن به هزاران پکیج مختلف دسترسی دارید. بعد از نصب nodejs نرم افزار مدیریت کننده پکیج یا همان npm هم به صورت خودکار نصب می شود.
پکیج منیجر YARN چیست ؟
npm کاستی هایی داشت که شرکت فیس بوک تلاش کرد این کاستی ها را برطرف سازد. به همین جهت فیس بوک yarn را ارائه داد. در واقع yarn جایگزین یا رقیب npm نیست بلکه یک installer می باشد که در کنار npm می باشد و از همان ساختار npm و رجیستری استفاده می کند . به زبان ساده تر رجیستری هنوز همان رجیستری است اما روش نصب متفاوت شده است. از آنجایی که Yarn و npm یک مجموعه پکیج را دارند اگر بخواهید از Yarn به npm یا بالعکس بروید نیازی به تغییرات سنگین نخواهید داشت.
مزایا پکیج منیجر NPM چیست ؟
میتوانید وابستگیهای local یا global را به آسانی مدیریت کنید.
بهطور خودکار یک فایل package-lock.json تولید میکند که برای commit کردن به یک version control system مفید است. بهاین ترتیب، سایر توسعهدهندگان یک تیم میتوانند بهراحتی وابستگیهای مشابهی را در پروژه خود نصب کنند.
شما به npmjs دسترسی خواهید داشت که تعداد پکیجهای بیشتری نسبت به pypi، rubygems یا packagist در آن وجود دارد.
این ابزار برای مدیریت چندین نسخه از وابستگیها نیز مناسب است.
مزایا پکیج منیجر YARN چیست ؟
بسیاری از مشکلهایی که در Monorepo وجود داشتند را برطرف کرده است. برای مثال اگر چندین پکیج را در یک ریپازیتوری نگهداری میکنید و آنها دارای فایلهای package.json جداگانه هستند، میتوانید تمام packageها را بهراحتی با yarn بهروزرسانی کنید. همچنین به لطف مفهوم workspaces میتوانید وابستگیهای تمام پکیجها را بهسادگی در یک ریپازیتوری نصب کنید. برخلاف این قابلیت yarn، در npm میبایستی دستور npm install را در تمامی مسیرهای پکیجها اجرا کنید.
yarn از یک lock file با نام yarn.lock استفاده میکند، بنابراین پروژههای شما برای دیگر افراد تیم بهدرستی کار خواهد کرد. از این مفهوم با عنوان الگوریتم deterministic install نیز یاد میشود.
در هنگامی که شبکهی شما با خطای failure روبرو باشد، yarn قادر است تا درخواستهای HTTP جدیدی ارسال کند و این قابلیت در زمانی که با مشکلهای موقت اینترنت روبرو هستید بسیار مفید است.
yarn از مکانسیم offline cache استفاده میکند به این معنی که با اولین نصب یک پکیج، فایلهای آن پکیج توسط yarn به پوشهای مخصوص فایلهای cache شده در مسیر ~/.yarn-cache اضافه میشوند. بنابراین دفعهی دیگری که میخواهید این پکیج را نصب کنید، بهجای ایجاد درخواست HTTP از فایلهای cache شده استفاده میشود. این پشرفت کوچک باعث تحول قابل توجهی در عملکرد yarn نسبت به npm شده است.
این ابزار دارای یک بررسی کنندهی مجوز داخلی است که در سناریوهای مختلف توسعهی برنامه نیز میتواند مفید باشد.
yarn برخلاف npm از بارگیری موازی استفاده میکند که نتیجهی آن فرایند build سریعتر پکیجها است.