Bosh sahifa Wiki pnpm

pnpm

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.

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