Yarn در مقابل npm

Yarn در مقابل npm

اگر توسعه دهنده ی جاوااسکریپت هستید حتما با Node.js آشنا هستید؛ Node.js همان محیط اجرای کراس پلتفرم( cross-platform runtime ) و متن باز جاوا اسکریپت است که چند سال است قرار است Bun.js جای آن را بگیرد! این محیط اجرا بسیار پر طرفدار است و در سال های اخیر تعداد بسیاری زیادی بروزرسانی دریافت کرده و ابزار مختلفی بر روی آن توسعه داده شده اند.

زمانی که شما با Node.js کار می کنید حتما از ابزار مدیریت منابع ( package manager ) آن استفاده می کنید و احتمالا یکی از دو package manager معروف تر NPM و یا Yarn بیشتر به شخصیت شما می خورد.

package manager چیست؟

یک package manager ابزاری است که به شما کمک می کند وابستگی های داخلی یک پروژه( نسخه ی پکیج های مختلف) را به صورت خودکار مدیریت کنید. NPM و Yarn همیشه دو قطب بحث در مورد بهترین package manager هستند. در این مقاله ما هردو package manager را به صورت جامع و دقیق بررسی می کنیم و مزایا، معایب، سرعت، کارایی و امنیت هردو را مقایسه کنیم.


یک گفتگوی واقعی

+: ننویس npm توی فایل پکیج اگر ببینی از yarn استفاده کردم.

-: نمیشه پروژه رو دوباره با npm نصب کنم؟

+: نه! yarn سریع تره و امنیت بهتری داره و چیزیم خراب نمیشه.

-: ببین البته npm هم الآن یکی دو ساله به خوبی yarn شده ها!

+: همین که برای نشون دادن خوب بودنش داری با yarn مقایسش میکنی و میگی مثل yarn شده یعنی حق با منه!


NPM چیست؟

1200px-Npm-logo.svg

به صورت پیش فرض وقتی Node.js را نصب می کنید، package manager پیش فرض آن به نام NPM ( Node Package Manager ) همراه آن بر روی کامپیوتر شما نصب می شود. با استفاده از این package manager می توانید به سادگی میتوانید ابزاری که میخواهید را نصب، مدیریت و پاک کنید.

این package manager از 3 بخش گوچکتر تشکیل شده است:

  • یک وبسایت که وظیفه ی مدیریت بخش های اصلی NPM را به عهده دارد.
  • یک رجیستری از تمام پکیج های عمومی Node.js .
  • یک CLI برای ارتباط با NPM از طریق ترمینال

Yarn چیست؟

Yarn-logo-kitten.svg

کلمه ی Yarn مخفف Yet Another Resource Navigator (یعنی : حالا یک مدیریت کننده ی منابع دیگه) یک package manager نسبتا جدید است که توسط Facebook توسعه داده شده است. این package manager به این علت توسعه داده شد که NPM ویژگی های زیادی را برای مدیریت نسخه در گذشته کم داشت، امنیت برنامه های جاوااسکریپتی مرتبا در معرض خطر قرار میگرفت، برنامه های جاوااسکریپتی قابل اطمینان نبودند و بیشتر از امروز از کار می افتادند و بهینه نبودند!

از زمان معرفی Yarn ، توسعه دهندگان NPM سعی کردند ویژگی های جدیدی را به آن اضافه کنند تا بیشتر شبیه به Yarn شود اما در بیشتر اوقات از Yarn عقب می مانند. از آنجایی که Yarn به صورت پیش فرض با Node.js نصب نمی شود، پس از نصب Node.js می توانید از دستور زیر برای نصب Yarn استفاده کنید:

npm install yarn -g

ویژگی های منحصر بفرد Yarn

  1. نصب و استفاده ( Plug’n’Play ) : Yarn از نقشه ی وابستگی ها( dependencies map) برای مدیریت وابستگی ها استفاده می کند. این مسئله باعث می شود که بهینگی بیشتر نسبت به رقیب خود داشته باشد و پروژه سریع تر راه اندازی شود و پکیج ها نیز بسیار سریع تر نصب شوند.
  2. بدون نیاز به نصب( Zero-Installs ) : این ویژگی به همراه ویژگی قبل به ایجاد کش آفلاین( offline cache ) وابستگی ها کمک می کند؛ یعنی پکیج هایی که قبلا ذخیره کرده اید دیگر مجددا دانلود نمی شوند.
  3. بررسی کننده ی لایسنس ( License checker ) : Yarn خودش تمام License های پکیج ها را بررسی می کند و اگر پروژه ی شما متن باز است میتواند برای شما لایسنس های استفاده شده را به پروژه اضافه کند.

مشابهت ها و تفاوت ها

شباهت های Yarn و NPM

هردو package manager در چهار ویژگی زیر شباهت دارند:

  1. قفل نسخه ایجاد می کنند تا مراقب وضعیت وابستگی های پروژه باشند.
  2. میتوانند نسخه ی آفلاین کش وابستگی ها را ایجاد کنند تا در زمان عدم دسترسی به اینترنت بتوانید پکیج ها را نصب کنید.
  3. هردو workspace های را ایجاد می کنند تا بتوانید وابستگی های پروژه های مختلف را در یک ریپازیتوری مدیریت کنید.
  4. با استفاده از دستور های npx و yarn dlx اسکریپت های دلخواه خود را توسعه دهید و اجرا کنید.

تفاوت های Yarn و NPM

در این قسمت تفاوت های هردو package manager را در زمینه های مدیریت وابستگی ها(Dependency Management)، کارایی و سرعت(Performance and Speed)، امنیت (Security) و محبوبیت(Popularity) بررسی میکنیم:

مدیریت وابستگی ها

در بحث مدیریت وابستگی ها npm پکیج ها را نوبتی دانلود کرده و هماهنگی آنها را بررسی میکند اما yarn پکیج ها را به صورت موازی دانلود می کند و پیش از دانلود و نصب نسخه های مناسب برای دانلود و نصب را تشخیص می دهد.

سرعت و کاریی

خودتان به نمودار زیر دقت کنید!

yarn and npm speed

امنیت

به منظور بررسی امنیت پکیج ها و جلوگیری از مشکلات وابستگی yarn قبل از دانلود پکیج ها را بررسی میکند و سپس اقدام به دانلود می نماید اما npm در زمان نصب هر پکیج این مسئله را بررسی می کند. البته هردو package manager استفاده از دستور

npm audit fix

را برای رفع مشکلات احتمالی بعدی پیشنهاد می دهند.

محبوبیت

در نمودار زیر میزان دانلود هردو package manager را مشاهده می کنید:

1655281431312-Image-2 (14)

پس با این حساب برنده npm است. نه!؟

دقت کنید که با هر دانلود Node.js شما در واقع npm را نیز نصب میکنید و برای بررسی بهتر محبوبیت هردو package manager بهتر است به ستاره های گیتهاب آنها نگاهی بیاندازید!

1655281461789-Image-3 (9)

تعداد ستاره های گیتهاب yarn تقریبا 7 برابر ستاره های npm است!

کدومشون بهتره؟

برای این کار یک مقایسه ی نهایی رو انجام میدیم و دیگه خودتون باید تصمیم بگیرید!


من با توجه به پروژه، پکیج منیجیر رو انتخاب میکنم.

معمولا یا از دستور npx استفاده میکنم و به صورت کامل پروژه رو نصب میکنم و پکیج منیجر رو به yarn تغییر میدم،

یا وقتی اسکریپت npx برای پروژه وجود نداره از ابتدا از yarn استفاده می کنم.


npm

این پکیج package manager بیشتر روی پروژه های قدیمی که کسی فعلا قصد بروز رسانی کلیشون رو نداره استفاده میشه. همچنین اگر به این package manager عادت دارید لزومی نداره که برید سراغ یک package manager دیگه. همچنین این package manager همیشه سعی میکنه خودشو به yarn برسونه و کمتر توسعه دهنده ای از ویژگی های خیلی جدید این دو package manager استفاده می کنه.

مزایای npm

  • سادگی استفاده
  • کمتر مصرف کردن حافظه دیسک

معایب npm

  • نیازمند دسترسی به اینترنت برای نصب پکیج ها
  • حفره های امنیتی بی شمار و امکان بوجود آمدن مشکلات وابستگی

yarn

این package manager جدید تره و ویژگی های مدرن بیشتری داره. امنیتش نسبتا از npm بالاتره البته حافظه ی دیسک بیشتری هم برای هر پروژه ایجاد میکنه.

مزایای yarn

  • ویژگی های مدرن مثل دانلود و نصب موازی
  • امنیت بالا
  • جامعه کاربری بزرگتر و فعالتر از npm

معایب yarn

  • با نسخه های 6 به قبل Node.js کار نمی کند.
  • برای نصب برخی ماژول های محلی مشکل دارد.