Мотивація
Saving disk space
При використанні npm, якщо у вас є 100 проєктів, що використовують якусь залежність, ви будете мати 100 копій цієї залежності на диску. У pnpm залежність буде зберігатися в адресованому за вмістом сховищі, тому:
- Якщо ви використовуєте різні версії залежностей, до сховища будуть додані лише ті файли, які відрізняються. 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. - Всі файли збережені в одному місці на диску. Коли пакунки встановлюються, для їх файлів створюються жорсткі посилання з цього єдиного місця, не займаючи додаткового місця на диску. Це дозволяє обмінюватися залежностями однієї версії між різними проєктами.
В результаті ви зберігаєте багато місця на своєму диску пропорційно кількості проєктів і залежностей, і встановлення відбувається значно швидше!
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
.
Створення не пласкої теки node_modules
При встановленні залежностей за допомогою npm або Yarn Classic всі пакунки підіймаються у корінь теки модулів. В результаті вихідний код має доступ до залежностей, які не додаються як залежності до проєкту.
Стандартно pnpm використовує символічні посилання для додавання лише прямих залежностей проєкту до кореня теки модулів.
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
. Це дозволить pnpm створити теку node_modules, подібну до тек, створених npm та Yarn Classic.