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:
- 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. - 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 paketin aynı 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
npm veya Yarn Classic ile bağımlılıkları kurarken, tüm paketler modül dizininin köküne çekilir. Haliyle sonuç olarak, projeye kesin olarak dahil etmediğimiz yan kütüphanelere, kaynak koduz erişim sağlayabilir.
By default, pnpm uses symlinks to add only the direct dependencies of the project into the root of the modules directory. 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:
If your tooling doesn't work well with symlinks, you may still use pnpm and set the node-linker setting to hoisted
. This will instruct pnpm to create a node_modules directory that is similar to those created by npm and Yarn Classic.