Motivasyon
Saving disk space
When using npm, if you have 100 projects using a dependency, you will have 100 copies of that dependency saved on disk. 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!
Boosting installation speed
pnpm perfoms installation in three stages:
- Dependency resolution. All required dependencies are identified and fetched to the store.
- Directory structure calculation. The
node_modules
directory structure is calculated based on the dependencies. - Linking dependencies. All remaining dependencies are fetched and hard linked from the store to
node_modules
.
This approach is significantly faster than the traditional three-stage installation process of resolving, fetching, and writing all dependencies to node_modules
.
Creating a non-flat node_modules directory
When installing dependencies with npm or Yarn Classic, all packages are hoisted to the root of the modules directory. As a result, source code has access to dependencies that are not added as dependencies to the project.
By default, pnpm uses symlinks to add only the direct dependencies of the project into the root of the modules directory.
If you'd like more details about the unique node_modules
structure that pnpm creates and why it works fine with the Node.js ecosystem, read:
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.