Параметри (.npmrc)
pnpm отримує конфігурацію з командного рядка, змінних оточення та файлів .npmrc.
Командою pnpm config можна оновити та відредагувати вміст власного та глобального файлів .npmrc.
Ось чотири відповідні файли:
- конфігураційний файл для кожного проєкту (/path/to/my/project/.npmrc`)
- конфігураційний файл для кожного робочого простору (тека, в якій міститься файл
pnpm-workspace.yamlфайл) - файл конфігурації для кожного користувача (
~/.npmrc) - файл глобальної конфігурації (
/etc/npmrc)
Усі файли .npmrc — це список у форматі INI параметрів key = value.
Значення у файлах .npmrc можуть містити змінні env з використанням синтаксису ${NAME}. Змінні env також можуть бути вказані зі стандартними значеннями. Використання ${NAME-fallback} поверне fallback, якщо NAME не задано. ${NAME:-fallback} поверне fallback, якщо NAME не задано або є порожнім рядком.
Налаштування підйому залежностей
hoist
- Стандартно: true
- Тип: Boolean
Коли true, всі залежності підійматися до node_modules/.pnpm/node_modules. Це робить не перелічені залежності доступними для всіх пакунків всередині node_modules.
hoist-workspace-packages
- Стандартно: true
- Тип: Boolean
Коли true, пакунки з робочих просторів буде звʼязано або з <workspace_root>/node_modules/.pnpm/node_modules, або з <workspace_root>/node_modules, залежно від інших параметрів підйому (hoist-pattern та public-hoist-pattern).
hoist-pattern
- Стандартно: ['*']
- Тип: string[]
Вказує pnpm, які пакунки слід підняти до node_modules/.pnpm/node_modules. Стандартно, всі пакунки буде піднято — однак, якщо ви знаєте, що лише деякі пакунки мають фантомні залежності, ви можете скористатися цим параметром, щоб підняти лише фантомні залежності (рекомендується).
Наприклад:
hoist-pattern[]=*eslint*
hoist-pattern[]=*babel*
Ви тако ж можете заборонити підйом шаблонів за допомогою !.
Наприклад:
hoist-pattern[]=*types*
hoist-pattern[]=!@types/react
public-hoist-pattern
- Стандартно: []
- Тип: string[]
На відміну від hoist-pattern, який підіймає залежності до прихованої теки модулів у віртуальному сховищі, public-hoist-pattern підіймає залежності, що відповідають шаблону, до кореневої теки модулів. Підняття до кореневої теки модулів означає, що код застосунку матиме доступ до фантомних залежностей, навіть якщо вони неправильно змінять стратегію розвʼязання.
Цей параметр корисний при роботі з деякими недосконалими інструментами, що підключаються, які не обробляють залежності належним чином.
Наприклад:
public-hoist-pattern[]=*plugin*
Зауваження: Встановлення shamefully-hoist у true аналогічно встановленню public-hoist-pattern у *.
Ви також можете заборонити підйом шаблонів за допомогою !.
Наприклад:
public-hoist-pattern[]=*types*
public-hoist-pattern[]=!@types/react
shamefully-hoist
- Стандартно: false
- Тип: Boolean
Стандартно pnpm створює напівсувору теку node_modules, тобто залежності мають доступ до неоголошених залежностей, а модулі поза межами node_modules — ні.
За такої схеми більшість пакунків в екосистемі працюють без проблем.
Однак, якщо деякі інструменти працюють лише тоді, коли підняті залежності знаходяться у корені node_modules, ви можете встановити цей параметр у true, щоб підняти їх для вас.
Параметри модулів
modules-dir
- Стандартно: node_modules
- Тип: path
Тека, до якої буде встановлено залежності (замість node_modules).
node-linker
- Стандартно: isolated
- Тип: isolated, hoisted, pnp
Визначає, який компонувальник слід використовувати для встановлення пакунків Node.
- isolated — залежності компонуються з віртуального сховища за адресою
node_modules/.pnpm. - hoisted — створюється плаский
node_modulesбез символічних посилань. Так само як іnode_modules, створені за допомогою npm або Yarn Classic. При використанні цього параметра для підйому використовується одна з бібліотек Yarn. Законні причини для використання цього налаштування:- Ваші інструменти погано працюють із символічними посиланнями. Проєкт на React Native, швидше за все, буде працювати тільки в тому випадку, якщо ви використовуєте піднятий
node_modules. - Ваш проєкт буде розгорнуто на безсерверний хостинг. Деякі безсерверні провайдери (наприклад, AWS Lambda) не підтримують symlinks. Альтернативним розвʼязання цієї проблеми є пакування програми перед розгортанням.
- Якщо ви хочете опублікувати свій пакунок за допомогою
"bundledDependencies". - Якщо ви використовуєте Node.js із прапорцем --preserve-symlinks.
- Ваші інструменти погано працюють із символічними посиланнями. Проєкт на React Native, швидше за все, буде працювати тільки в тому випадку, якщо ви використовуєте піднятий
- pnp — без
node_modules. Plug'n'Play — це інноваційна стратегія для Node, яка використовується Yarn Berry. Рекомендується також встановити параметрsymlinkу значенняfalse, якщо ви використовуєтеpnpяк ваш компонувальник.
символічне посилання
- Стандартно: true
- Тип: Boolean
Коли symlink встановлено у false, pnpm створює віртуальну теку сховища без жодних символьних посилань. Це корисний параметр разом з node-linker=pnp.
enable-modules-dir
- Стандартно: true
- Тип: Boolean
Якщо false, pnpm не записуватиме жодних файлів до теки модулів (node_modules). Це корисно, коли теку модулів змонтовано з файловою системою у просторі користувача (FUSE). Існує експериментальна версія CLI, яка дозволяє змонтувати теку модулів за допомогою FUSE: @pnpm/mount-modules.