در این آموزش ، ما 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 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: نتیجه گیری
ما دیدیم که مدیران بسته چقدر برای توسعه وب مدرن اهمیت دارند و دو رقیب محبوب در بازار را مقایسه کرده ایم. هر دو مزایا و معایب خود را دارند و برای انتخاب بهترین برای شما ، باید تصور روشنی از الزامات خود داشته باشید. بهترین راه برای تصمیم گیری در مورد این که برای شما مناسب تر است این است که هر دو را امتحان کنید و ببینید کدام یک عملکرد بهتری دارد.
و در نهایت ، بیش از حد در مورد آن فکر نکنید. فقط یکی را انتخاب کنید و به قسمت سرگرم کننده بروید: ایجاد برنامه های عالی!