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

Мотивація

Заощадження дискового простору

Ілюстрація сховища з адресованим вмістом pnpm. На ілюстрації представлено два проєкти з node_modules. Файли у теках node_modules є жорсткими посиланнями на ті самі файли у сховищі з адресованим вмістом.

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

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

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

Прискорює встановлення

pnpm виконує встановлення в три етапи:

  1. Розвʼязання залежностей. Усі необхідні залежності ідентифікуються та завантажуються до сховища.
  2. Розрахунок структури тек. Структура теки node_modules обчислюється на основі залежностей.
  3. Звʼязування залежностей. Всі інші залежності витягуються зі сховища і для них створюються жорсткі посилання на node_modules.

Ілюстрація процесу встановлення pnpm. Пакунки обробляються, отримуються та для них створюються жорсткі посилання якнайшвидше.

Цей підхід є значно швидшим, ніж традиційний триетапний процес встановлення, який полягає в розв’язанні, отриманні та запису всіх залежностей у node_modules.

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

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

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

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

Ілюстрація теки node_modules, створеної pnpm. Пакунки у кореневій теці node_modules є символічними посиланнями на теки всередині теки node_modules/.pnpm

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

підказка

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