Skip to main content
Version: 5.x

Motivasyon

Daha az disk tüketimi ve aşırı hızlı kurulum#

Varsayalım abc adında bir kütüphaneyi (dependency), 100 adet projende kullanıyorsun. Yarn ve npm kullanırken, abc adındaki kütüphane, 100 adet projende tek tek klonlanarak yüklendiğinden, disk tüketimini x100 defa arttırarak depolamış olursun. Pnpm iseabc kütüphanesini ortak bir alanda depolar ve:

  1. Eğer, abc kütüphanesinin birden fazla sürümünün kullanılması gerekiyorsa, ortak alanda sadece farklı olan dosyalar depolanır ve fazla yer tüketimine müsade etmez. Örneğin, abc kütüphanesinde 100 adet dosya yüklenmiş ise ve gelecekte yayınlanacak olan yeni sürümde 1 adet dosyada değişiklik olmuşsa; pnpm update komutu, yeni sürüm için 100 adet dosyayı yeniden indirmek/yüklemek yerine sadece değiştirilmiş olan o 1 dosyayı çekerek güncellemeyi uygular.
  2. Bütün dosyalar, disk üzerinde sadece bir yerde depolanır. Bu durumda abc kütüphanesini farklı bir projeye dahil etmek istediğin zaman, hâli hazırda ortak alanda depolanan dosyalara, hard-link (sembolik bağ) oluşturularak, ekstra disk tüketiminden tasarruf edilmiş olur. Böylece bir kütüphanenin/paketin belirli bir sürümünü, projelerin arasında paylaştırma imkanı elde etmiş olursun.

Sonuç olarak, projelerinde kullandığın kütüphanelerin sayısına orantılı olarak disk tüketiminde ve yükleme hızında, müthiş bir seviyede kazanç sağlamış olursun!

Düz, klasik, "hepsi bir arada" node_modules dizin yapısından kurtulma#

Normalde, npm ile projeye dahil ettiğimiz kütüphane ve bu kütüphane ile birlikte gelen yan kütüphanelerin tamamı, node_modules klasörünün ana dizininde, yan yana depolanır. Haliyle sonuç olarak, projeye kesin olarak dahil etmediğimiz yan kütüphanelere, kaynak koduz erişim sağlayabilir.

pnpm ise, sembolik bağlar (symlink) oluşturarak projenin node_modules klasörüne sadece kesin olarak belirtilmiş kütüphaneleri dahil eder. Pnpm'in, benzersiz node_modules klasör yapısı ve bu yapının Node.js ekosistemi ile nasıl ve neden uyumlu biçimde çalıştığı hakkında daha fazla bilgi almak istersen eğer: