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

pnpm чи npm

Пласке дерево npm

Починаючи з версії 3, npm підтримує «пласке» дерево залежностей. Це призводить до меншого роздування дискового простору, а побічним ефектом є безлад у теці node_modules.

З іншого боку, pnpm керує node_modules за допомогою жорстких посилань і символічних посилань на глобальне сховище вмісту на диску, що адресується. Це дає змогу значно зменшити використання дискового простору, а також зробити ваші node_modules охайними. Існує документація щодо store layout, якщо ви бажаєте дізнатися більше.

Перевагою правильної структури node_modules у pnpm є те, що вона «допомагає уникнути безглуздих помилок», унеможливлюючи використання модулів, які не вказано у package.json проєкту.

Встановлення

pnpm не дозволяє встановлювати пакунки без збереження їх у package.json. Якщо до pnpm add не передано жодних параметрів, пакунки буде збережено як звичайні залежності. Як і у випадку з npm, --save-dev і --save-optional можна використовувати для встановлення пакунків як dev або необовʼязкових залежностей.

Як наслідок цього обмеження, проєкти не матимуть жодних сторонніх пакунків, коли вони використовують pnpm, якщо тільки вони не видалять залежність і не залишать її сиротою. Саме тому реалізація команди prune у pnpm не дозволяє вам вказувати пакунки для відсікання — вона ЗАВЖДИ вилучає усі зайві та осиротілі пакунки.

Тека dependencies

Тека dependencies починається з префікса file: і вказує на теку у файловій системі. Як і npm, pnpm звʼязує ці залежності. На відміну від npm, pnpm не виконує встановлення для файлових залежностей.

Це означає, що якщо у вас є пакунок з назвою foo (<root>/foo), який має bar@file:../bar як залежний, pnpm не виконуватиме встановлення для <root>/bar під час запуску pnpm install з foo.

Якщо вам потрібно запустити встановлення декількох пакунків одночасно, наприклад, у випадку монорепо, зверніться до документації pnpm -r.