Motivation
Saving disk space
Lorsque vous utilisez npm, si vous avez 100 projets utilisant une dépendance, vous aurez 100 copies de cette dépendance enregistrées sur le disque. Avec pnpm, la dépendance sera stockée dans un stockage adressable au contenu, donc:
- Si vous dépendez de différentes versions de la dépendance, seuls les fichiers qui diffèrent sont ajoutés au stockage. Par exemple, si elle a 100 fichiers, et qu'une nouvelle version a un changement dans un seul de ces fichiers,
pnpm update
ajoutera seulement 1 nouveau fichier au stockage, au lieu de cloner la dépendance toute entière juste pour un seul changement. - Tous les fichiers sont enregistrés en un seul endroit sur le disque. Lorsque des packages sont installés, leurs fichiers sont liés directement à partir de cet emplacement unique, ne consommant aucun espace disque supplémentaire. Cela vous permet de partager les dépendances de même version entre les projets.
En conséquence, vous économisez beaucoup d'espace sur votre disque proportionnellement au nombre de projets et de dépendances, et vous avez des installations beaucoup plus rapides !
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.