Параметри конфігурації 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-*