Yarn — Facebook tomonidan 2016-yilda, Exponent, Google va Tilde kompaniyalari bilan hamkorlikda taqdim etilgan, JavaScript uchun paket menejeri. U o’sha davrdagi npm‘ning tezlik va barqarorlik bilan bog’liq muammolariga muqobil sifatida yaratilgan.
npm muammolariga javob sifatida yaratilishi
2016-yilgacha npm‘ning versiyasi bir xil package.json fayli asosida turli kompyuterlarda turlicha bog’liqlik versiyalarini o’rnatishi mumkin edi, bu esa “mening kompyuterimda ishlaydi” degan mashhur muammoni keltirib chiqargan. Yarn aynan shu barqarorlik muammosini hal qilishga qaratilgan holda ishlab chiqilgan.
yarn.lock fayli orqali barqarorlik
Yarn taqdim etgan yarn.lock fayli har bir bog’liqlikning aniq versiyasini va uning o’z bog’liqliklarini batafsil qayd etadi, bu esa loyihani istalgan kompyuterda o’rnatganda bir xil natijaga erishishni kafolatlaydi. Bu g’oya shu qadar muvaffaqiyatli bo’ldiki, npm ham keyinchalik o’zining package-lock.json faylini qo’shdi.
Parallel yuklab olish orqali tezlik
Yarn paketlarni parallel ravishda yuklab olish va allaqachon yuklab olingan paketlarni mahalliy keshda saqlash orqali o’rnatish jarayonini o’sha davrdagi npm‘ga qaraganda sezilarli tezlashtirdi. Bu tezlik farqi Yarn’ning tez ommalashishining asosiy sabablaridan biri bo’lgan.
Yarn Berry o’zgarishlari
2020-yilda taqdim etilgan Yarn 2 (Yarn Berry deb ham ataladi) “Plug’n’Play” deb ataladigan yangi rejimni kiritdi, u an’anaviy node_modules papkasi o’rniga bog’liqliklarni boshqacha, ko’proq samarali usulda boshqaradi. Ammo bu o’zgarish ba’zi mavjud vositalar bilan mosligi masalasida murakkablik keltirib chiqargani sababli, ko’plab loyihalar hamon Yarn 1 versiyasida qolishni afzal ko’rgan.
npm bilan hozirgi holat
Zamonaviy npm versiyalari Yarn taqdim etgan ko’plab imkoniyatlarni (lock fayllar, tezroq o’rnatish) o’ziga singdirganidan so’ng, ikkala vosita orasidagi farq sezilarli darajada kamaydi. Tanlov ko’pincha jamoaning odati yoki muayyan loyiha talablariga bog’liq bo’lib qoladi.
Bog’liq tushunchalar
npm, Facebook, Lock fayl, pnpm, Node.js, Paket menejeri, package.json