Перейти до основного вмісту

Параметри конфігурації Node-модулів в pnpm

· 2 хв. читання
Золтан Кочан
Головний розробник 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

Однак, якщо деякі з ваших залежностей намагаються отримати доступ до пакунків, яких у них немає в залежностях, у вас є два варіанти:

  1. Створіть pnpmfile.js та скористайтеся хуком, щоб додати відсутню залежність до маніфесту пакунка.

  2. Додайте шаблон до параметра hoist-pattern. Наприклад, якщо не знайдено модуль babel-core, додайте наступний параметр до .npmrc:

    hoist-pattern[]=babel-core

Найгірший випадок — підйом у корінь​

Деякі інструменти можуть не працювати навіть зі стандартною конфігурацією pnpm, яка піднімає все в корінь віртуального сховища, а також деякі пакунки. У цьому випадку ви можете підняти або все, або підмножину залежностей до кореня теки modules.

Підняття всього до кореня node_modules:

shamefully-hoist=true

Підйом тільки пакунків, які відповідають шаблону:

public-hoist-pattern[]=babel-*