Passer au contenu principal
Version : 10.x

Motivation

Économie d’espace disque

An illustration of the pnpm content-addressable store. Sur l'illustration il y a deux projets avec des dossier node_modules. The files in the node_modules directories are hard links to the same files in the content-addressable store.

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:

  1. Si vous dépendez de différentes versions de la dépendance, seuls les fichiers qui diffèrent sont ajoutés au stockage. For instance, if it has 100 files, and a new version has a change in only one of those files, pnpm update will only add 1 new file to the store, instead of cloning the entire dependency just for the singular change.
  2. 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 !

Accélérer la vitesse d'installation

pnpm performs installation in three stages:

  1. La résolution des dépendances. Toutes les dépendances requises sont identifiées et extraites dans le dépôt.
  2. Calcul de la structure des dossiers. The node_modules directory structure is calculated based on the dependencies.
  3. Gestion des dépendances. All remaining dependencies are fetched and hard linked from the store to node_modules.

An illustration of the pnpm install process. Packages are resolved, fetched, and hard linked as soon as possible.

This approach is significantly faster than the traditional three-stage installation process of resolving, fetching, and writing all dependencies to node_modules.

An illustration of how package managers like Yarn Classic or npm install dependencies.

Création d'un répertoire node_modules non uniforme

Lors de l'installation de dépendances avec npm ou Yarn, tous les packages sont hissés à la racine du dossier des modules. Par conséquent, le code source a accès aux dépendances qui ne sont pas ajoutées en tant que dépendances au projet.

Par défaut, pnpm utilise des liens symboliques pour n'ajouter que les dépendances directes du projet à la racine du dossier des modules.

An illustration of a node_modules directory created by pnpm. Packages in the root node_modules are symlinks to directories inside the node_modules/.pnpm 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:

astuce

If your tooling doesn't work well with symlinks, you may still use pnpm and set the nodeLinker setting to hoisted. Cela indiquera à pnpm de créer un répertoire node_modules similaire à ceux créés par npm et Yarn Classic.