Ana içeriğe atla
Sürüm: 8.x

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.