pnpm (“performant npm” so’zlaridan) — JavaScript uchun paket menejeri bo’lib, uning asosiy maqsadi npm va Yarn‘ning eng katta kamchiliklaridan biri — disk xotirasini haddan tashqari ko’p sarflashni hal qilish edi.
Nomi va maqsadi
An’anaviy paket menejerlarida, agar kompyuteringizda o’nlab loyiha bo’lsa va ularning barchasi bir xil kutubxonaning bir xil versiyasidan foydalansa ham, har bir loyihaning o’z node_modules papkasida ushbu kutubxonaning alohida nusxasi saqlanadi. pnpm bu takrorlanishni yo’qotishga qaratilgan.
Kontent-manzilli saqlash orqali disk tejash
pnpm barcha yuklab olingan paketlarni kompyuterda bitta markazlashgan global omborda saqlaydi, har bir paket versiyasi faqat bir marta jismonan diskda mavjud bo’ladi. Turli loyihalar bir xil kutubxonadan foydalanganda, ular shunchaki ushbu markazlashgan omborga havola qiladi — bu yondashuv, ayniqsa ko’p loyihaga ega dasturchilar uchun, gigabaytlab disk xotirasini tejashi mumkin.
Symlink asosidagi node_modules tuzilishi
pnpm loyiha ichidagi node_modules papkasini qattiq nusxalar o’rniga symlink (ramziy havola)lar orqali tuzadi. Bundan tashqari, pnpm faqat package.jsonda to’g’ridan-to’g’ri ko’rsatilgan paketlarga kirishni ruxsat beruvchi qat’iyroq papka tuzilishini yaratadi, bu esa dasturchining bilmasdan bog’liqlik sifatida e’lon qilinmagan paketdan foydalanib qo’yishi (phantom dependency) muammosining oldini oladi.
Monorepo loyihalardagi afzalligi
Bitta repozitoriyda bir nechta bog’liq loyihani saqlaydigan monorepo arxitekturasida pnpm ayniqsa samarali ishlaydi, chunki uning workspace mexanizmi loyihalar orasida umumiy bog’liqliklarni takrorlamasdan boshqarish imkonini beradi. Bu xususiyat pnpm’ni yirik korporativ kod bazalarida mashhur qilgan.
npm/Yarn bilan qiyoslash
pnpm o’rnatish tezligi va disk sarfi bo’yicha odatda npm va Yarn‘dan ustun natija ko’rsatadi, ammo uning qat’iy papka tuzilishi ba’zi eski kutubxonalar bilan moslik muammolarini keltirib chiqarishi mumkin. Shunga qaramay, so’nggi yillarda pnpm yangi loyihalarda tobora ko’proq standart tanlovga aylanib bormoqda.
Bog’liq tushunchalar
npm, Yarn, Monorepo, Symlink, Node.js, Disk xotirasi, package.json