Перейти к основному содержимому
Версия: 6.x

Мотивация

Экономия места на диске и повышение скорости установки

При использовании npm или Yarn, когда у вас есть 100 проектов использующих определенную зависимость, ваш диск будет иметь сохраненными 100 копий этой зависимости. С pnpm зависимость будет храниться в хранилище с адресацией по содержимому (CAS), поэтому:

  1. Если вы зависите от различных версий зависимости, в хранилище добавляются только файлы, которые отличаются друг от друга. Например, если у зависимости 100 файлов, и новая версия зависимости имеет изменение только в одном из этих файлов, pnpm update добавит только 1 новый файл в хранилище, вместо копирования всей новой версии зависимости.
  2. Все файлы сохраняются в одном месте на диске. Когда пакеты устанавливаются, их файлы линкуются из этого единого хранилища и не потребляют дополнительного дискового пространства. Это позволяет делиться зависимостями одной и той же версии между проектами.

В результате вы экономите много места на вашем диске пропорционально количеству проектов и зависимостей, и вы получаете намного более быструю установку!

Создание не плоского каталога node_modules

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

По умолчанию в pnpm используются ссылки для добавления только прямых зависимостей проекта в корневой каталог модулей. Если вы хотите получить более подробную информацию об уникальной структуре node_modules , создаваемой pnpm и как она работает с экосистемой Node.js:

подсказка

Если ваш инструментарий не очень хорошо работает с символическими ссылками, вы можете использовать pnpm и установить параметр node-linker в hoisted. Это даст указание pnpm создать каталог node_modules, аналогичный каталогу, созданному npm и Yarn Classic.