pnpm чи npm
Пласке дерево npm#
npm maintains a flattened dependency tree. Це призводить до меншого роздування дискового простору, а побічним ефектом є безлад у теці 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#
A directory dependency points to a directory in the filesystem. pnpm handles it according to its protocol:
link:(also recorded bypnpm add ./dir) symlinks the directory intonode_modules. pnpm does not install the directory's own dependencies.file:copies the directory into the virtual store as a package and installs its dependencies like any other package.
For example, if a package called foo (<root>/foo) has bar@link:../bar as a
dependency, pnpm does not install the dependencies of <root>/bar when you run
pnpm install on foo.
Якщо вам потрібно запустити встановлення декількох пакунків одночасно, наприклад, у випадку монорепо, зверніться до документації pnpm -r.