pnpm vs npm
npm's flat tree
npm verisyon 3 itibariyle klasik düzleştirilmiş bağımlılık ağacı yapısını kullanmaktadır 3. Bu durum disk kullanımında verimlilik sağlıyor olsa da bir yandan da düzensiz bir node_modules
klasörü ile bizi karşı karşıya bırakır.
Öte yandan, pnpm node_modules
klasörünü hard linkler ve sembolik linkler kullanarak diskte global olarak işaretlediği depodan çağırarak kullanmaktadır. Bu sayede hem daha az disk alanı kullanırken, hem de node_modules
klasörünü düzenli tutar. Daha fazla bilgi için depolama yerleşimi dökümantasyonuna göz atabilirsiniz.
Düzenli node_module
klasör yapısına sahip olmanın iyi yanı package.json
da listelenmeyen modüllerin hiçbir şekilde kullanılamayacak olmasıdır bu da "saçma buglarlarla mücadelemizde" bize yardımcı olur.
Kurulum
pnpm package.json
da belirtilmediği sürece paket kurumulmuna izin vermez. Eğer pnpm add
komutu herhangi bir ek -parametre- almadan girilirse paketler normal bağımlılıklar olarak kaydedilir. npm'de olduğu gibi --save-dev
and --save-optional
komutları paketleri geliştirici bağımlılığı veya isteğe bağlı bağımlılıklar olarak kaydetmemizi sağlar.
As a consequence of this limitation, projects won't have any extraneous packages when they use pnpm unless they remove a dependency and leave it orphaned. That's why pnpm's implementation of the prune command does not allow you to specify packages to prune - it ALWAYS removes all extraneous and orphaned packages.
Dizin bağımlılıkları
Dizin bağımlılıkları fıle:
prefixi ile başlayıp dosya sitemindeki bir dizine işaret eder. npm'de olduğu gibi pnpm de symlinkler ile bu bağımlılıkları kurar. npm'den farklı olarak, pnpm dosya bağımılıkları için kurulum gerçekleştirmez.
Yani, foo
(<root>/foo
) adında ve bar@file:../bar
bağımlılığına sahip bir paketiniz varsa, pnpm foo
için pnpm install
komutunu kullandığınızda <root>/bar
için kurulum gerçekleştirmez.
Eğer aynı anda birden çok pakedin kurulumunu gerçekleştirmek istiyorsanız, mesela bir monorepo için, pnpm -r
dökümantasyonuna göz atmalısınız.