Параметри конфігурації Node-модулів в pnpm
Існує багато способів створення теки node_ modules. Вашою метою має бути створення найсуворішого модуля, але якщо це неможливо, є варіанти створення довільних node_modules.
Стандартне встановлення#
Стандартно pnpm v5 створить напівсуворе сховище node_modules. Напівсуворе означає, що ваш застосунок зможе вимагати лише пакунки, додані як залежності до package.json (з кількома винятками). Проте, ваші залежності будуть мати доступ до будь-яких пакунків.
Стандартна конфігурація виглядає так:
; Усі пакунки підіймаються до node_modules/.pnpm/node_modules
hoist-pattern[]=*
; Усі типи підіймаються до кореня, щоб задовольнити TypeScript
public-hoist-pattern[]=*types*
; Усі пакунки, пов’язані з ESLint, також підіймаються до кореневої теки
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
Найгірший випадок — підйом у корінь#
Деякі інструменти можуть не працювати навіть зі стандартною конфігурацією pnpm, яка піднімає все в корінь віртуального сховища, а також деякі пакунки. У цьому випадку ви можете підняти або все, або підмножину залежностей до кореня теки modules.
Підняття всього до кореня node_modules:
shamefully-hoist=true
Підйом тільки пакунків, які відповідають шаблону:
public-hoist-pattern[]=babel-*