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.