در این آموزش ، ما Yarn را با npm – دو محبوب ترین مدیر بسته مقایسه می کنیم. ما آنها را در کنار هم قرار می دهیم و مزایا و معایب مربوطه را بررسی می کنیم تا به شما کمک کند کدام را برای پروژه های خود استفاده کنید.

بیان اصول اولیه

در روزهای خوب گذشته ، یک ویرایشگر متن ساده برای توسعه دهندگان کافی بود تا بخش بزرگی از پروژه های خود را ایجاد و مدیریت کنند. اما از آن زمان ، وب به شدت تغییر کرده است. امروزه ، حتی برای یک پروژه نسبتاً ساده متداول است که صدها یا هزاران اسکریپت داشته باشد ، با وابستگی های پیچیده تو در تو ، که مدیریت آنها بدون نوعی ابزار خودکار به سادگی غیرممکن است. و این مکانی است که مدیران بسته در آن وارد عمل می شوند.

آ مدیر بسته ابزاری است که به طور خودکار وابستگی های یک پروژه را به طرق مختلف مدیریت می کند. به عنوان مثال ، با کمک مدیر بسته ها می توانیم بسته ها را نصب ، حذف نصب ، به روز رسانی و ارتقا دهیم ، تنظیمات پروژه را پیکربندی کنیم ، اسکریپت ها را اجرا کنیم و غیره. تمام کارهای سخت و طاقت فرسا توسط مدیر بسته انجام می شود و تنها بخش سرگرم کننده را به ما واگذار می کند – خود کد نویسی.

بالاتر از سطح دریا مخفف Node Package Manager است. این برنامه در سال 2010 منتشر شد و دوران جدیدی را در توسعه وب آغاز کرد. تا آن زمان ، وابستگی های پروژه بارگیری و به صورت دستی مدیریت می شد. npm عصای جادویی بود که وب را به سطح بعدی رساند.

npm در واقع شامل سه چیز است:

  • آ سایت اینترنتی برای مدیریت جنبه های مختلف تجربه npm خود
  • آ ثبت برای دسترسی به پایگاه داده عمومی گسترده بسته های جاوا اسکریپت
  • آ رابط خط فرمان (CLI) برای تعامل با npm از طریق ترمینال

با این حال ، وقتی اکثر مردم در مورد npm صحبت می کنند ، معمولاً منظور آخرین مورد – ابزار CLI است. با هر بار نصب جدید Node ، به عنوان مدیر بسته پیش فرض ارسال می شود. این بدان معناست که می توانید بلافاصله شروع به استفاده از آن کنید.

اگر می خواهید در کار با npm غرق شوید ، لطفاً از راهنمای مدیر بسته Node ما مشورت کنید.

نخ مخفف Yet Another Resource Negotiator است. مدیر بسته Yarn جایگزینی برای npm است که توسط Facebook در اکتبر 2016 منتشر شد. هدف اصلی Yarn رسیدگی به اشکالات npm مانند مسائل مربوط به عملکرد و امنیت بود. Yarn به سرعت به عنوان یک ابزار مدیریت وابستگی امن ، سریع و قابل اعتماد جاوا اسکریپت قرار گرفت.

اما تیم npm درس خود را آموخت و با اجرای ویژگی های از دست رفته به سرعت شکاف npm را پر کرد.

بیایید به سرعت در زمان سفر کنیم تا تصویر بزرگ را ببینیم:

  • 2010: npm با پشتیبانی از Node منتشر شد.
  • 2016: Yarn منتشر شد. عملکرد بسیار بیشتری نسبت به npm نشان می دهد. همچنین الف تولید می کند yarn.lock فایلی که اشتراک گذاری و تکرار دقیق repos را بسیار ساده تر و قابل پیش بینی می کند.
  • 2017: npm 5 منتشر شد. تولید خودکار a را ارائه می دهد package-lock.json فایل در پاسخ به yarn.lockبه
  • 2018: npm 6 با افزایش امنیت منتشر می شود. اکنون npm آسیب پذیری های امنیتی را قبل از نصب وابستگی ها بررسی می کند.
  • 2020: Yarn 2 و npm 7 منتشر می شوند. هر دو بسته دارای ویژگی های جدید عالی هستند ، همانطور که بعداً در این آموزش خواهیم دید.
  • 2021: Yarn 3 با پیشرفت های مختلف منتشر شد.

امروزه ، هر دو مدیر بسته در مسابقه مدیریت بسته گردن به گردن هستند و ویژگی ها و قابلیت های مشابهی را ارائه می دهند. اما هنوز چندین تفاوت وجود دارد که به تعیین اینکه کدام را برای استفاده انتخاب می کنیم کمک می کند.

در بقیه این آموزش ، ما شباهت ها و تفاوت های اصلی بین npm و Yarn را بررسی می کنیم.

نخ در مقابل npm: مقایسه نصب

ما کاوش مقایسه ای خود را با فرآیند نصب برای npm و Yarn آغاز می کنیم.

خود مدیران بسته را نصب کنید

همانطور که در بالا اشاره کردم ، npm با Node از پیش نصب شده است ، بنابراین نیازی به نصب دستی npm نیست.

در مقابل ، Yarn باید به صراحت نصب شود. اول ، ما باید Yarn را به صورت جهانی نصب کنیم:

npm install -g yarn

سپس ، می توانیم از آن برای هر پروژه با تنظیم نسخه مورد نظر در داخل پروژه خود استفاده کنیم. ما این کار را با اجرای برنامه انجام می دهیم yarn set version دستور در فهرست اصلی پروژه:

yarn set version berry

در این مورد، berry نسخه ای است که می خواهیم تنظیم کنیم

اگر می خواهیم به آخرین نسخه به روز رسانی کنیم ، این را اجرا می کنیم:

yarn set version latest

با Yarn می توانیم برای هر پروژه از نسخه متفاوتی استفاده کنیم.

برای انجام همین کار با npm ، باید داشته باشید nvm (Node Version Manager) نصب شده است. در اینجا نحوه نصب چندین نسخه از Node با استفاده از nvm آمده است.

نصب وابستگی های پروژه

حال ، بیایید ببینیم چگونه وابستگی های پروژه نصب می شوند.

وقتی می دویم npm install، وابستگی ها به صورت متوالی ، یکی پس از دیگری نصب می شوند. سیاهههای مربوط به خروجی در ترمینال آموزنده هستند اما خواندن آنها کمی سخت است.

برای نصب بسته ها با Yarn ، برنامه را اجرا می کنیم yarn فرمان Yarn بسته ها را به صورت موازی نصب می کند ، که یکی از دلایل سریعتر بودن آن از npm است. اگر از نخ 1 استفاده می کنید ، خواهید دید که سیاهههای خروجی نخ تمیز ، از نظر بصری قابل تشخیص و مختصر هستند. آنها همچنین برای درک آسان به شکل درخت سفارش داده شده اند. اما این در نسخه های 2 و 3 تغییر می کند ، جایی که سیاههها چندان بصری نیستند و برای انسان قابل خواندن نیستند.

تا اینجا ، ما دیدیم که npm و Yarn دستورات متفاوتی برای نصب بسته ها دارند. در بخش بعدی ، دستورات بیشتری را بررسی می کنیم.

مقایسه دستورات npm و Yarn

npm و Yarn دستورات زیادی را به اشتراک می گذارند ، اما دستورات غیر یکسان زیادی نیز وجود دارد. بیایید ابتدا برخی از دستورات یکسان را کشف کنیم:

  • npm init | yarn init: ایجاد بسته جدید
  • npm run | yarn run: یک اسکریپت تعریف شده در package.json
  • npm test | yarn test: یک بسته را آزمایش کنید
  • npm publish | yarn publish: انتشار یک بسته
  • npm cache clean | yarn cache clean: همه داده ها را از پوشه cache حذف کنید

این دستورات جابجایی بین دو مدیر را آسان می کند ، اما برخی دستورات غیر یکسان وجود دارد که می تواند باعث سردرگمی شود. بیایید ببینیم آنها در لیست بعدی چیست:

  • npm install | yarn: نصب وابستگی ها
  • npm install [package] | yarn add [package]: نصب یک بسته
  • npm install --save-dev [package] | yarn add - -dev [package]: یک بسته را به عنوان وابستگی توسعه نصب کنید
  • npm uninstall [package] | yarn remove [package]: حذف یک بسته
  • npm uninstall --save-dev [package] | yarn remove [package]: یک بسته وابستگی توسعه را حذف کنید
  • npm update | yarn upgrade: وابستگی ها را به روز کنید
  • npm update [package] | yarn upgrade [package]: یک بسته را به روز کنید

Yarn همچنین دارای چند دستور منحصر به فرد است که معادل npm ندارند. به عنوان مثال why دستور دلیل نیاز به بسته را نشان می دهد: ممکن است یک وابستگی ، یک ماژول بومی یا وابستگی به پروژه باشد.

نخ در مقابل npm: سرعت و عملکرد

هر زمان که Yarn یا npm نیاز به نصب یک بسته داشته باشند ، آنها یک سری کارها را انجام می دهند. در npm ، این وظایف به ازای هر بسته و به صورت متوالی اجرا می شوند ، به این معنی که قبل از حرکت به بسته بعدی منتظر نصب کامل بسته خواهد بود. در مقابل ، Yarn این وظایف را به صورت موازی اجرا می کند و عملکرد را افزایش می دهد.

در حالی که هر دو مدیر مکانیزم های ذخیره سازی را ارائه می دهد ، به نظر می رسد Yarn این کار را بهتر انجام می دهد. با پیاده سازی پارادایم نصب صفر ، همانطور که در قسمت مقایسه ویژگی ها خواهیم دید ، تقریباً می تواند بسته ها را در کمترین زمان نصب کند. هر بسته را ذخیره می کند و روی دیسک ذخیره می کند ، بنابراین در نصب بعدی این بسته شما حتی نیازی به اتصال به اینترنت ندارید ، زیرا بسته بصورت آفلاین از دیسک نصب شده است.

حتی اگر Yarn دارای مزایایی باشد ، سرعت Yarn و npm ، در آخرین نسخه های آنها ، تقریباً قابل مقایسه است. بنابراین ما نمی توانیم در اینجا یک برنده پاک تعریف کنیم.

نخ در مقابل npm: یک مقایسه امنیتی

یکی از انتقادات اصلی به npm مربوط به امنیت است. نسخه های قبلی npm دارای چند عدد است آسیب پذیری های جدی امنیتیبه

از نسخه 6 ، npm بسته ها را هنگام نصب بررسی می کند و در صورت وجود هرگونه آسیب پذیری به شما می گوید. ما می توانیم این چک را به صورت دستی با اجرا انجام دهیم npm audit در برابر بسته های نصب شده در صورت وجود هرگونه آسیب پذیری ، npm به ما توصیه های امنیتی می دهد.

گزارش بسته های ناامن حسابرسی npm

همانطور که در تصویر بالا مشاهده می کنید ، می توانیم اجرا کنیم npm audit fix برای رفع آسیب پذیری های بسته ، و درختان وابستگی در صورت امکان برطرف می شوند.

از Yarn و npm استفاده می شود الگوریتم های هش رمزنگاری برای اطمینان از یکپارچگی بسته ها

نخ در مقابل npm: مقایسه ویژگی ها

درست مانند دستورات ، برخی از ویژگی ها توسط npm و Yarn به اشتراک گذاشته می شوند ، در حالی که تفاوت هایی نیز وجود دارد. بیایید ابتدا ویژگی های مشترک این دو مدیر بسته را به اشتراک بگذاریم.

ایجاد یک فایل قفل

که در package.json، فایلی که در آن npm و Yarn وابستگی های پروژه را پیگیری می کنند ، شماره نسخه همیشه دقیق نیست. در عوض ، می توانید طیف وسیعی از نسخه ها را تعریف کنید. به این ترتیب ، می توانید یک نسخه اصلی و جزئی از یک بسته را انتخاب کنید ، اما به npm اجازه دهید آخرین وصله را نصب کند که ممکن است برخی از اشکالات را برطرف کند.

در دنیای ایده آل از نسخه معنایی، نسخه های وصله شده شامل هیچ تغییر فاحشی نمی شوند. اما متأسفانه ، همیشه اینطور نیست. استراتژی به کار گرفته شده توسط npm ممکن است منجر به خاتمه دو ماشین مشابه شود package.json فایل مختلف ، اما دارای نسخه های مختلف بسته نصب شده است – که احتمالاً اشکالات را نشان می دهد.

برای جلوگیری از عدم تطابق نسخه بسته ، نسخه دقیق نصب شده در یک فایل قفل بسته پین ​​می شود. هر بار که یک ماژول اضافه می شود ، npm و Yarn ایجاد (یا به روز رسانی) a package-lock.json و yarn.lock فایل به ترتیب به این ترتیب ، می توانید ضمانت کنید که دستگاه دیگری دقیقاً همان بسته را نصب کند ، در حالی که هنوز دارای طیف وسیعی از نسخه های مجاز تعریف شده در آن هستید package.jsonبه

استفاده از فضاهای کاری

فضاهای کاری به شما این امکان را می دهد که برای مدیریت وابستگی ها در پروژه های مختلف ، یک برنامه تک کاره داشته باشید. این بدان معناست که شما یک بسته ریشه واحد و سطح بالا دارید که دارای چندین بسته فرزند به نام فضاهای کاری است.

اجرای اسکریپت ها از راه دور

این npx دستور برای اجرای اسکریپت ها از ./node_modules/.binبه همچنین به شما امکان می دهد بسته ها را از رجیستری npm بدون نصب آنها در وابستگی های پروژه خود اجرا کنید. به عنوان مثال ، می توانید یک برنامه React جدید با اجرای موارد زیر ایجاد کنید:

npx create-react-app my-app

در نخ ، می توانید با استفاده از معادل به همان نتیجه برسید dlx دستور:

yarn dlx create-react-app my-app

بقیه ویژگی هایی که قرار است بررسی کنیم مختص Yarn است.

نصب صفر

Zero install cache را در فهرست پروژه شما ذخیره می کند .yarn پوشه وقتی از دستوراتی مانند yarn یا yarn add <package>، Yarn ایجاد خواهد کرد .pnp.cjs فایل. این فایل شامل سلسله مراتب وابستگی است که توسط Node برای بارگیری بسته های پروژه شما استفاده می شود. بنابراین ، تقریباً در زمان صفر می توانید به آنها دسترسی پیدا کنید.

Plug’n’Play

Plug’n’Play یک استراتژی نصب جایگزین است. به جای ایجاد a node_modules و با واگذاری رزولوشن به Node ، Yarn یک واحد تولید می کند .pnp.cjs فایلی که بسته ها را به محل قرارگیری آنها بر روی دیسک و لیست وابستگی های آنها ترسیم می کند. این ویژگی می تواند منجر به راه اندازی سریعتر پروژه ، بهینه سازی درخت وابستگی بهتر ، زمان نصب سریعتر و البته نیاز به node_modules پوشه

مجوزها

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

Yarn vs npm: کدام مدیر بسته را انتخاب کنید

ما شباهت ها و تفاوت های مختلف npm و Yarn را پوشش داده ایم ، اما مشخص نکرده ایم که کدام بهتر است و کدام را باید انتخاب کنیم. مثل همیشه ، پاسخ به خواسته ها و نیازهای ما بستگی دارد.

به عنوان یک راهنمای کلی ، اجازه دهید با توصیه زیر به پایان برسانم:

  • اگر از گردش کاری فعلی خود راضی هستید ، نمی خواهید ابزار اضافی نصب کنید و فضای دیسک زیادی ندارید ، npm را انتخاب کنید.

  • اگر می خواهید برخی از ویژگی های عالی مانند Plug’n’Play را بخواهید ، Yarn را انتخاب کنید ، به برخی از قابلیت هایی که در npm وجود ندارد نیاز دارید و فضای کافی روی دیسک دارید.

اگر هنوز تصمیم گیری روشن بین npm و Yarn برای شما دشوار است ، می توانید آن را بررسی کنید pnpm، که سعی می کند بهترین مدیران بسته را ترکیب کند و سومین ماهی بزرگ در استخر مدیریت بسته است.

نخ در مقابل npm: نتیجه گیری

ما دیدیم که مدیران بسته چقدر برای توسعه وب مدرن اهمیت دارند و دو رقیب محبوب در بازار را مقایسه کرده ایم. هر دو مزایا و معایب خود را دارند و برای انتخاب بهترین برای شما ، باید تصور روشنی از الزامات خود داشته باشید. بهترین راه برای تصمیم گیری در مورد این که برای شما مناسب تر است این است که هر دو را امتحان کنید و ببینید کدام یک عملکرد بهتری دارد.

و در نهایت ، بیش از حد در مورد آن فکر نکنید. فقط یکی را انتخاب کنید و به قسمت سرگرم کننده بروید: ایجاد برنامه های عالی!