Існує багато способів створення каталогу node_ modules. Вашою метою має бути створення найсуворішого модуля, але якщо це неможливо, є варіанти створення довільних node_modules.
Налаштування за замовчуванням
За замовчуванням pnpm v5 створить напівсуворий node_modules. Напівсуворий означає, що ваша програма зможе вимагати лише пакети, додані як залежності до package.json
(за кількома винятками). Проте, ваші залежності будуть мати доступ до будь-яких пакетів.
Конфігурація за замовчуванням виглядає так:
; All packages are hoisted to node_modules/.pnpm/node_modules
hoist-pattern[]=*
; All types are hoisted to the root in order to make TypeScript happy
public-hoist-pattern[]=*types*
; All ESLint-related packages are hoisted to the root as well
public-hoist-pattern[]=*eslint*
Plug'n'Play. Найсуворіша конфігурація
pnpm підтримує Yarn's Plug'n'Play починаючи з версії 5.9. За допомогою PNP і ваша програма, і залежності вашої програми матимуть доступ ли ше до їх оголошених залежностей. Це навіть суворіше, ніж встановлення hoist=false
, оскільки всередині монорепо ваша програма не зможе отримати доступ навіть до залежностей кореневого проєкту.
Щоб використовувати Plug'n'Play, установіть такі параметри:
node-linker=pnp
symlink=false
Строгий, традиційний каталог модулів
Якщо ви ще не готові використовувати PnP, ви все ще можете бути "строгими" та дозволити пакетам отримувати доступ лише до своїх власних залежностей, встановивши для параметра hoist значення false:
hoist=false
Однак, якщо деякі з ваших залежностей намагаються отримати доступ до пакетів, яких у них немає в залежностях, у вас є два варіанти:
-
Створіть
pnpmfile.js
та скористайтеся хуком, щоб додати відсутню залежність до маніфесту пакета. -
Додайте шабло н до параметра
hoist-pattern
. Наприклад, якщо не знайдено модульbabel-core
, додайте наступний параметр до.npmrc
:hoist-pattern[]=babel-core
Найгірший випадок - підйом на корінь
Some tools might not work even with the default configuration of pnpm, which hoists everything to the root of the virtual store and some packages to the root. У цьому випадку ви можете підняти або все, аб о підмножину залежностей до кореня каталогу modules.
Підняття всього до кореня node_modules:
shamefully-hoist=true
Підйом тільки пакетів, які відповідають шаблону:
public-hoist-pattern[]=babel-*