Перейти до основного змісту
Версія: 8.x

Мотивація

Saving disk space

An illustration of the pnpm content-addressable store. On the illustration there are two projects with node_modules. The files in the node_modules directories are hard links to the same files in the content-addressable store.

При використанні npm, якщо у вас є 100 проєктів, що використовують якусь залежність, ви будете мати 100 копій цієї залежності на диску. У pnpm залежність буде зберігатися в адресованому за вмістом сховищі, тому:

  1. Якщо ви використовуєте різні версії залежностей, до сховища будуть додані лише ті файли, які відрізняються. Наприклад, якщо залежність має 100 файлів, і нова версія має зміну лише в одному з цих файлів, pnpm update додасть тільки 1 новий файл в сховище, замість клонування всієї залежності.
  2. Всі файли збережені в одному місці на диску. Коли пакунки встановлюються, для їх файлів створюються жорсткі посилання з цього єдиного місця, не займаючи додаткового місця на диску. Це дозволяє обмінюватися залежностями однієї версії між різними проєктами.

В результаті ви зберігаєте багато місця на своєму диску пропорційно кількості проєктів і залежностей, і встановлення відбувається значно швидше!

Boosting installation speed

pnpm perfoms installation in three stages:

  1. Dependency resolution. All required dependencies are identified and fetched to the store.
  2. Directory structure calculation. The node_modules directory structure is calculated based on the dependencies.
  3. Linking dependencies. 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.

Створення не пласкої теки node_modules

При встановленні залежностей за допомогою npm або Yarn Classic всі пакунки підіймаються у корінь теки модулів. В результаті вихідний код має доступ до залежностей, які не додаються як залежності до проєкту.

Стандартно pnpm використовує символічні посилання для додавання лише прямих залежностей проєкту до кореня теки модулів.

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

Якщо вам потрібно більше деталей про унікальну структуру node_modules, яку створює pnpm, і чому вона добре працює з екосистемою Node.js, прочитайте:

підказка

Якщо ваші інструменти погано працюють із символічними посиланнями, ви все одно можете використовувати pnpm і встановити для параметра node-linker значення hoisted. Це дозволить pnpm створити теку node_modules, подібну до тек, створених npm та Yarn Classic.