اگر با فضای توسعه وب با جاوا اسکریپت آشنا باشید حتما نام npm را شنیده اید. npm یک package manager است که به صورت خودکار با نصب node.js برایتان نصب می شود. package manager چیست؟ package manager به معنی «مدیریت کننده پکیج» است. همانطور که می دانید ما در جاوا اسکریپت به یک بسته کد «پکیج» یا «ماژول» می گوییم.
مخاطب مقاله: این مقاله برای افرادی طراحی شده است که با npm آشنا بوده و حالا می خواهند از yarn استفاده کنند.
به اشتراک گذاری کد با استفاده از پکیج ها بسیار ساده و آسان می شود و در اکوسیستم جاوا اسکریپت جا افتاده است. از مزایای استفاده از چنین سیستمی می توان به موارد زیر اشاره کرد:
با این حساب Yarn چیست و چه نقشی در این اکوسیستم دارد؟ Yarn جایگزینی برای npm است. احتمالا می پرسید چرا باید به جای npm از yarn استفاده کنیم؟ npm معایب خودش را نیز دارد، گرچه این معایب بسیار کوچک هستند:
Yarn پا به میدان گذاشته است تا این مسائل را حل کند. از مهم ترین ویژگی ها و مزایای yarn می توان به موارد زیر اشاره کرد:
yarn از طریق npm نصب می شود بنابراین برای نصب آن باید ابتدا دستور زیر را اجرا کنید:
npm install -g yarn
اگر از کاربران لینوکس یا مک هستید احتمالا باید دستور sudo را نیز قبل از این دستور قرار بدهید:
sudo npm install -g yarn
حالا اگر دستور yarn --version را در ترمینال خود اجرا کنید می بینید که نسخه اول yarn برایتان نصب شده است. برای اینکه به نسخه ۲ برویم باید دستور زیر را اجرا کنید:
yarn set version berry
هر زمانی که خواستید yarn را به روز رسانی کنید نیز باید این دستور را اجرا کنید:
yarn set version latest
زمانی که می خواهیم یک پروژه را با npm شروع کنیم باید دستور npm init را اجرا می کردیم. yarn نیز به همین شکل است بنابراین یک پوشه را برای خودتان در نظر بگیرید و ترمینال را درون آن باز کنید. حالا دستور yarn init را در آن اجرا کنید. با اجرای این دستور چندین فایل پوشه مختلف درون پوشه مورد نظر شما ساخته می شوند. مثلا یک فایل gitignore را داریم که برای نادیده گرفتن برخی از فایل ها از نظر git است. همچنین فایل package.json را داریم که پکیج های ما را مدیریت می کند.
از این به بعد پروژه ما تحت نظر yarn است. برای اضافه کردن یک پکیج از ساختار زیر استفاده می کنیم:
yarn add [package]
مثلا برای اضافه کردن پکیج axios می گوییم:
yarn add axios
اگر نسخه خاصی از این پکیج را نیز بخواهید باید آن را بدین شکل بنویسید:
yarn add [package]@[version]
به طور مثال:
yarn add axios@0.21.1
yarn نیز مانند npm چند دسته وابستگی دارد:
dependencies: در ابتدا وابستگی های استاندارد را داریم که پروژه برای اجرا شدن به آن ها وابسته است. اگر این وابستگی ها به درستی نصب نشوند برنامه اجرا نخواهد شد. مثلا بدون پکیج react نمی توانید یک وب سایت react ای بسازید.
devDependencies: وابستگی های خاص توسعه که در اصل پروژه استفاده نمی شوند و فقط در زمان توسعه به آن ها نیاز داریم. به زبان ساده تر آن ها ابزار های توسعه برای ما هستند. مثلا وبپک (webpack) همیشه یک dev-dependency است چرا که زمانی که پروژه را روی سرور قرار می دهیم دیگر با webpack کاری نداشته و از آن استفاده نمی کنیم اما در هنگام کدنویسی و توسعه پروژه حتما به آن نیاز داریم.
peerDependencies: این وابستگی که اعلام می کند این پکیج حتما بخشی از یک پکیج دیگر است. تفاوت این دسته از وابستگی ها با وابستگی های dev (توسعه) این است که وابستگی های dev بخشی از پکیجی دیگر نیستند. مثلا اگر یک وب سایت را با react می نویسیم، کد هایمان را با webpack کامپایل می کنیم اما خود webpack بخشی از پکیج react نیست. وابستگی های peer یا همسان بخشی از یک پکیج دیگر بوده و نمی توانند به صورت مستقل استفاده شوند. مثلا اگر یک پلاگین برای فریم ورک Express بنویسید، آن پلاگین یک وابستگی peer برای پکیج Express به شمار می رود. یا مثلا پکیج react-dom یک وابستگی peer برای پکیج react محسوب می شود.
optionalDependencies: وابستگی هایی که می توانند در پروژه استفاده شوند اما وجودشان ضروری نیست. اگر فرآیند نصب این وابستگی ها به مشکل بخورد yarn هیچ خطایی به شما نمی دهد.
حالت اول نصب (وابستگی های عادی) را در قسمت قبلی مشاهده کردیم:
yarn add axios
برای سه حالت بعدی (وابستگی های dev و peer و optional) می توانید از فلگ های خاص خودشان استفاده کنید:
yarn add [package] --dev yarn add [package] --peer yarn add [package] --optional
اضافه کردن این فلگ ها در انتهای دستور add باعث می شود این وابستگی ها به صورت خاصی نصب شوند. برای اینکه این مسئله را به صورت عملی ببینیم بیایید آن را با هم امتحان کنیم. ابتدا پکیج axios را به صورت وابستگی استاندارد نصب کنید:
yarn add axios
حالا پکیج nodemon را به صورت وابستگی dev نصب می کنیم:
yarn add nodemon --dev
در حال حاضر اگر فایل package.json را باز کنید باید محتوای زیر را در آن ببینید:
{ "name": "code", "dependencies": { "axios": "0.21.1" }, "devDependencies": { "nodemon": "^2.0.7" } }
فیلد name برابر code است چرا که اسم پوشه من code بوده است. این مقدار بنا بر نام پوشه شما تغییر می کند و می توانید هر مقداری را برایش انتخاب کنید. قسمت مهم برای ما dependencies و devDependencies است. امیدوارم متوجه تفاوت شده باشید.
اگر پکیجی را از قبل دانلود کرده بودید و حالا می خواهید آن را به روز رسانی کنید چطور؟ برای به روز رسانی پکیج ها باید از دستور upgrade استفاده کنید:
yarn upgrade [package] yarn upgrade [package]@[version]
و نهایتا برای حذف یک پکیج یا همان وابستگی نیز از دستور remove استفاده می کنیم:
yarn remove [package]
همچنین زمانی که کد هایی را دریافت می کنید که فقط اسکریپت اصلی را دارند و وابستگی هایش را ندارند باید دستور yarn یا yarn install را اجرا کنید. هر دو دستور یکی بوده و دقیقا معادل npm install هستند.
Yarn از Semantic Versioning پیروی می کند که یک سیستم مشهور برای تعیین نسخه نرم افزار ها است. ساختار کلی آن به شکل major.minor.patch است به طوری که:
نکته مهم بعدی این است که اگر به فایل package.json نگاه کنید، در کنار نسخه هر اسکریپت یک علامت < یا > یا = یا ^ یا چیزی شبیه به این ها را مشاهده می کنید:
"devDependencies": { "nodemon": "^2.0.7" }
این علامت ها comparator نام داشته و هر کدام معنی خاصی دارند. من با چند مثال معنی آن ها را برایتان توضیح می دهم:
امیدوارم این مسئله برای شما واضح شده باشد.
منبع: وب سایت yarnpkg
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.