Мотивация
Экономия места на диске и повышение скорости установки
При использовании npm или Yarn, когда у вас есть 100 проектов использующих определенную зависимость, ваш диск будет иметь сохраненными 100 копий этой зависимости. С pnpm зависимость будет храниться в хранилище с адресацией по содержимому (CAS), поэтому:
- Если вы зависите от различных версий зависимости, в хранилище добавляются только файлы, которые отличаются друг от друга. Например, если у зависимости 100 файлов, и новая версия зависимости имеет изменение только в одном из этих файлов,
pnpm update
добавит только 1 новый файл в хранилище, вместо копирования всей новой версии зависимости. - Все файлы сохраняются в одном месте на диске. Когда пакеты устанавливаются, их файлы линкуются из этого единого хранилища и не потребляют дополнительного дискового пространства. Это позволяет делиться зависимостями одной и той же версии между проектами.
В результате вы экономите много места на вашем диске пропорционально количеству проектов и зависимостей, и вы получаете намного более быструю установку!
Создание не плоского каталога node_modules
При установке зависимостей с помощью npm или Yarn Classic, все пакеты устанавливаются в корень каталога модулей node_modules
. В результате исходный код имеет доступ к зависимостям, которые не обозначены как прямые зависимости проекта.
По умолчанию в pnpm используются ссылки для добавления только прямых зависимостей проекта в корневой каталог модулей. Если вы хотите получить более подробную информацию об уникальной структуре node_modules
, создаваемой pnpm и как она работает с экосистемой Node.js:
- Плоское размещение в node_modules не является единственным способом
- Структура слинкованной папки node_modules
Если ваш инструментарий не очень хорошо работает с символическими ссылками, вы можете использовать pnpm и установить параметр node-linker в hoisted
. Это даст указание pnpm создать каталог node_modules
, аналогичный каталогу, созданному npm и Yarn Classic.