مقایسه و بررسی پکیج منیجر npm و yarn

yarn یک پکیج منیجر نسبتا جدید در جاوا سکریپت است که توسط شرکت های Facebook, Google, Exponent, Tilde توسعه داده شده است. وقتی میخواهیم دو package manager جاوا اسکریپت npm و yarn را مقایسه کنیم باید ابتدا بدانیم اصلا چرا yarn ارائه شد و مزیت آن نسبت به npm چیست؟
- پکیج منیجر npm به اندازه کافی سریع و پایدار نیست.
- npm امنیت بالایی ندارد و اجازه اجرای کد را در هنگام نصب package به کاربران میدهد.
البته منظورمان این نیست که npm از رده خارج شده است و yarn جای آن را گرفته است. بلکه در این مقاله قصد داریم دو پکیج منیجر محبوب و قدرتمند npm و yarn را با یکدیگر مقایسه کنیم.
تا شما راحت تر بتوانید طبق نیاز خود یکی از آنها را برای نصب پکیج های موردنیاز پروژه تان انتخاب کنید.
تفاوت های عملکردی یا Functional
در نگاه اول ممکن است تصور کنیم Yarn شبیه npm است اما وقتی دقیق تر بررسی کنیم متوجه می شویم که yarn یکسری مزیت هایی نسبت به npm دارد.
فایل yarn.lock:
package.json فایلی است که هر دو پکیج منیجر npm و yarn از آن استفاده می کنند و لیست تمام وابستگی ها یا dependency های پروژه را در آن درج می کنند.
در این فایل نام پکیج های پروژه به همراه شماره ورژن آنها درج می شود. توسط npm و yarn می توان ورژن مشخصی از پکیج را نصب کرد. در صورتی که هنگام install کردن پکیج نسخه آن تعریف نشود، آخرین ورژن آن پکیج نصب خواهد شد.
کاربرد فایل lock
هدف از ایجاد فایل های lock ثبت ورژن پکیج نصب شده و ورژن های وابستگی ها یا dependencies آن در یک فایل و قفل کردن آن است.
اگر فایل lock در پروژه نداشته باشیم، با هر بار اجرای دستور install و نصب وابستگی های یک پکیج، آخرین ورژن آن پکیج نیز نصب خواهد شد. در صورتیکه ورژن پکیج در ابتدای نصب مثلا 2.1.4 بوده و در نصب های بعدی ورژنش به 2.2.3 تغییر پیدا کرده است.
بنابراین به منظور ذخیره نسخه ابتدایی package در هنگام install نیاز به فایل lock خواهیم داشت.
پس وجود فایل های package-lock.json و yarn.lock از بروز تداخل یا conflict بین ورژن های مختلف پکیج جلوگیری می کند.
در صورتی از YARN package manager استفاده کنید، خود yarn هنگام نصب یک پکیج، یک فایل yarn.lock بطور اتوماتیک ایجاد می کند و ورژن های package و تمام dependency های آن را در این فایل ثبت می کند.
اما پکیج منیجر npm بطور اتوماتیک فایل lock را در پروژه ایجاد نمی کند و فرد توسعه دهنده باید با اجرای دستور npm shrinkwrap فایل package-lock.json را بسازد.
npm shrinkwrap
- مطالعه مستندات دستور npm shrinkwrap در سایت npmjs.com
- مطالعه مستندات فایل lock در سایت yarnpkg.com
در صورت وجود فایل lock روند اجرای دستور install توسط npm به این شکل خواهد بود که npm install ابتدا فایل package-lock.json را بررسی می کند. سپس فایل package.json را مشاهده می کند. به همین ترتیب دستور yarn add ابتدا فایل yarn.lock را بررسی کرده و سپس به سراغ package.json می رود.
نصب موازی (Parallel Installation):
وقتی که yarn یا npm می خواهند یک package را نصب کنند یکسری از تسک ها را باید انجام دهند. در npm این تسک ها حین نصب هر پکیج بطور ترتیبی و پشت سرهم اجرا می شوند. به این معنی که npm منتظر اجرای یک تسک می ماند و پس از پایان اجرای آن، تسک جدید شروع به اجرا می کند. در صورتیکه yarn این تسک ها را بطور موازی یا parallel اجرا می کند که باعث افزایش کارایی یا performance خواهد شد.
برای تست کارایی و سرعت نصب پکیج در npm و yarn پکیج express را توسط هر کدام از آنها بطور مجزا نصب کردیم.
Express package نیاز به 42 پکیج یا dependency دارد. آماری که از این مقایسه و آنالیز بدست آمده بصورت زیر است:
- npm حدود 9 ثانیه طول می کشد تا پکیج express را نصب کند.
- yarn حدود 1.37 ثانیه طول می کشد تا پکیج express را نصب کند.
همانطور که مشاهده می کنید نصب پکیج توسط yarn بسیار سریع تر انجام می شود. بعنوان تست دیگر، Gulp را توسط npm و yarn نصب کرده ایم. خروجی به شکل زیر است:
- نصب گالپ توسط npm حدود 11 ثانیه زمان برد.
- نصب گالپ توسط yarn حدود 7.81 ثانیه زمان برد.
طبق آمار فوق شاهدیم که YARN Package Manager سرعت بیشتری نسبت به npm دارد.
خروجی تمیزتر (Cleaner Output):
بطور پیش فرض npm بسیار مفصل است! به این معنی که در حین نصب یک پکیج توسط npm install مشخصات کامل و تفصیلی آن پکیج در ترمینال یا cmd نمایش داده می شود اما yarn با اجرای دستور yarn add به شکل خلاصه یک گزارش از نصب پکیج ارائه می دهد.
نکته: npm بطور اتوماتیک با نصب nodejs روی سیستم نصب می شود و می توان از آن برای نصب پکیج های مورد نیاز استفاده کرد. اما برای نصب yarn می توان از دستور زیر استفاده کرد:
npm install --global yarn
تفاوت های دستوری یا Commands
علاوه بر تفاوت های عملکردی، Yarn با npm از لحاظ دستورات یا command نیز با هم متفاوت هستند. در yarn برخی از دستورات npm تغییر داده شده اند، همچنین برخی از دستورات حذف شده اند.
دستور yarn global:
بر خلاف npm، که عملیات گلوبال با استفاده از g- یا global– انجام می شوند، در yarn با تعریف پیشوند global می توان به این هدف رسید. دقت کنید که dependency های مختص یک پروژه نیازی نیست به شکل گلوبال یا سراسری نصب شوند.
پیشوند global فقط برای دستورات زیر کار می کنند:
yarn add, yarn bin, yarn ls , yarn remove
- مطالعه مستندات yarn global در سایت yarnpkg
دستور yarn install:
دستور npm install تمام پکیج های لیست شده در فایل package.json را نصب می کند. در صورتیکه yarn install فقط dependency های موجود در فایل yarn.lock را نصب خواهد کرد.
- مطالعه مستندات دستور yarn install
- مطالعه مستندات دستور npm install
دستور yarn add [-dev]
همانند npm install <package> دستور yarn add <package> به شما اجازه می دهد یک dependency را در پروژه خود نصب کنید. همانطور که از نامش پیداست، یک پکیج را به پروژه اضافه میکند و نام و ورژنش را در فایل package.json ثبت می کند. اما در npm به منظور درج نام پکیج در فایل package.json باید فلگ –save را در هنگام نصب پکیج تعریف کنیم.
در yarn برای اینکه نام پکیج بعنوان یکی از وابستگی های توسعه دهنده یا developer dependencies در package.json ثبت شود باید عبارت –dev را در هنگام اجرای yarn add تعریف کنیم. در npm هم باید –save-dev باید تعریف شود.
- مطالعه مستندات دستور yarn add
- مطالعه مستندات دستور npm install
دستور yarn licenses
در زمان نگارش این مقاله، هیچ معادلی برای این دستور در پکیج منیجر npm وجود ندارد. دستور yarn licenses ls لیست تمام لایسنس های پکیج های نصب شده را نمایش می دهد. دستور yarn licenses generate-disclaimer محتوای کامل تمام لایسنس ها را نمایش خواهد داد.
- مطالعه مستندات دستور yarn licenses
دستور yarn why
دستور yarn why به گراف وابستگی ها یا dependencies نفوذ می کند و این امکان را به توسعه دهنده می دهد که متوجه شود یک پکیج چرا نصب شده است. آیا بعنوان یکی از وابستگی ها یا dependencies از یک package نصب شده است یا بعنوان یک پکیج مستقل و اصلی.
- مطالعه مستندات دستورyarn why
دستور yarn upgrade [package]
توسط این کامند می توان یک پکیج را به آخرین نسخه ارتقا داد. یعنی آخرین ورژن پکیج را دانلود می کند و جایگزین ورژن قبلی می کند. سپس فایل های package.json و yarn.lock را نیز آپدیت می کند. معادل دستور yarn upgrade در npm دستور npm update می باشد.
- مطالعه مستندات دستور yarn upgrade
دستور yarn generate-lock-entry
این دستور، یک فایل yarn.lock را طبق وابستگی ها یا dependencies درج شده در فایل package.json ایجاد می کند. این دستور شبیه npm shrinkwrap کار می کند.
از دستور yarn generate-lock-entry باید با احتیاط استفاده کرد. زیرا فایل lock بطور اتوماتیک ایجاد و بروزرسانی می شود. و همانطور که قبلا گفتیم با نصب هر پکیج، نام آن بهمراه ورژن و لیست تمام dependecy هایش در فایل yarn.lock درج می شود.
- مطالعه مستندات دستور yarn generate-lock-entry
- مطالعه مستندات دستور npm shrinkwrap
پایداری و خوانایی (Stability and Reliability)
در اوایل عرضه پکیج منیجر yarn باگ های زیادی اعلام می شد و تیم توسعه دهنده آن بطور فعال و مستمر، در صدد رفع مشکلات و باگ های yarn بودند و هستند. این نشان دهنده اینست که yarn یک جامعه توسعه دهنده و پشتیبان حرفه ای و پیگیر دارد که باگ های آن را بسرعت resolve می کنند. در اغلب پروژه ها نیاز به یک package manager بشدت احساس می شود. پس اگر از yarn به این منظور استفاده می کنید و فرضا نصب یک پکیج با مشکل مواجه شد، فقط کافیست آن پکیج را remove کنید و سپس آن را نصب کنید. یا حتی بطور همزمان از npm هم بعنوان پکیج منیجر در کنار yarn استفاده کنید.
جمع بندی:
امتیازی که yarn package manager بطور کلی بدست می آورد از npm package manager بالاتر است. به این دلایل: بطور پیشفرض در yarn فایل lock را می سازد. نصب پکیج توسط yarn سریع تر از npm می باشد.
مزیت دیگر yarn نسبت به npm اینست که نصب و استفاده از yarn در یک پروژه در کنار npm اثرات منفی حداقلی دارد. به این معنی که فرض کنید شما در حال حاضر از npm بعنوان پکیج منیجر استفاده می کنید. اما الان می خواهید yarn را تست کنید. براحتی می توانید با اجرای دستور npm install –global yarn پکیج منیجر yarn را در کنار npm نصب کنید و به منظور نصب package از یکی از آنها به دلخواه استفاده کنید.
پیشنهاد ما استفاده از yarn به عنوان پکیج منیجر است. با اینکه npm قدیمی تر از yarn است اما بدلایل مذکور در این پست، yarn مزایایی دارد که باعث شده توسعه دهندگان آن را ترجیح دهند.
در آخر مایلیم نظر شما را درباره پکیج منیجر مورد علاقه خود بدانیم. معمولا از کدام پکیج منیجر در پروژه های تان استفاده می کنید؟ آیا این مقاله توانست به شما در انتخاب یک package manager مناسب کمک کند؟ لطفا نظرات خود را از طریق فرم ارسال دیدگاه با ما و سایر کاربران آکادمی راهکارینو در میان بگذارید.
دیدگاهتان را بنویسید