Параметри (.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.
virtual-store-dir
- Стандартно: node_modules/.pnpm
- Тип: path
Тека з посиланнями на сховище. Всі прямі та непрямі залежності проєкту повʼязані з цією текою.
Це корисний параметр, який може усунути проблеми з довгими шляхами у Windows. Якщо у вас є залежності з дуже довгими шляхами, ви можете вибрати віртуальне сховище у корені диска (наприклад, C:\my-project-store
).
Або ви можете встановити віртуальне сховище у .pnpm
і додати його до .gitignore
. Це зробить трасування стеку чистішим, оскільки шляхи до залежностей будуть на одну теку вище.
ПРИМІТКА: віртуальне сховище не може бути спільним для декількох проєктів. Кожен проєкт повинен мати власне віртуальне сховище (за винятком робочих просторів, де корінь є спільним).
virtual-store-dir-max-length
- Стандартно:
- У Linux/macOS: 120
- У Windows: 60
- Тип: number
Встановлює максимально допустиму довжину назв тек всередині теки віртуального сховища (node_modules/.pnpm
). Ви можете встановити менше значення, якщо у вас виникають проблеми з довгими шляхами у Windows.
package-import-method
- Стандартно: auto
- Тип: auto, hardlink, copy, clone, clone-or-copy
Керує способом імпорту пакунків зі сховища (якщо ви хочете вимкнути symlinks всередині node_modules
, то вам потрібно змінити параметр node-linker, а не цей).
- auto — спробувати клонувати пакунки зі сховища. Якщо клонування не підтримується, встановіть жорстке посилання на пакунки зі сховища. Якщо ані клонування, ані звʼязування неможливі, поверніться до копіювання
- hardlink — жорстке посилання на пакунки зі сховища
- clone-or-copy — спробувати клонувати пакунки зі сховища. Якщо клонування не підтримується, поверніться до копіювання
- copy — скопіювати пакунки зі сховища
- clone —клонувати (те ж що й copy-on-write або посилатись за посиланням) пакунки зі сховища
Клонування — найкращий спосіб запису пакунків у node_modules. Це найшвидший і найбезпечніший спосіб. Коли використовується клонування, ви можете редагувати файли у ваших node_modules, і вони не будуть змінені у центральному сховищі з адресованим вмістом.
На жаль, не всі файлові системи підтримують клонування. Ми рекомендуємо використовувати файлову систему з копіюванням при записі (CoW) (наприклад, Btrfs замість Ext4 в Linux) для найкращого досвіду роботи з pnpm.
modules-cache-max-age
- Стандартно: 10080 (7 днів в хвилинах)
- Тип: number
Час у хвилинах, через який слід видалити порожні пакунки з теки модулів. pnpm зберігає кеш пакунків у теці модулів. Це підвищує швидкість встановлення при перемиканні гілок або пониженню версій залежностей.
dlx-cache-max-age
- Стандартно: 1440 (1 день в хвилинах)
- Тип: number
Час у хвилинах, через який закінчується кеш dlx. Після виконання команди dlx pnpm зберігає кеш, який пропускає крок встановлення для наступних викликів тієї самої команди dlx.
Налаштування сховища
store-dir
- Стандартно:
- Якщо встановлено змінну середовища $PNPM_HOME, тоді $PNPM_HOME/store
- Якщо встановлено змінну середовища $XDG_DATA_HOME, тоді $XDG_DATA_HOME/pnpm/store
- У Windows: ~/AppData/Local/pnpm/store
- В macOS: ~/Library/pnpm/store
- У Linux: ~/.local/share/pnpm/store
- Тип: path
Місце, де зберігаються всі пакунки на диску.
Сховище завжди має бути на тому самому диску, на якому відбувається встановлення, тому на кожному д иску буде одне сховище. Якщо на поточному диску є домашня тека, то сховище створюється всередині неї. Якщо на диску немає домашньої теки, то сховище створюється у корені файлової системи. Наприклад, якщо встановлення відбувається у файлову систему, змонтовану за адресою /mnt
, то сховище буде створено за адресою /mnt/.pnpm-store
. Те ж саме стосується і систем Windows.
Можна встановити сховище з іншого диска, але у цьому випадку pnpm копіюватиме пакунки зі сховища, а не звʼязуватиме їх жорсткими посиланнями, оскільки жорсткі посилання можливі лише у тій самій файловій системі.
verify-store-integrity
- Стандартно: true
- Тип: Boolean
Стандартно, якщо файл у сховищі було змінено, вміст цього файлу перевіряється перед звʼязуванням його з node_modules
проєкту. Якщо verify-store-integrity
встановлено у false
, файли у сховищі з адресованим вмістом не буде перевірено під час встановлення.
use-running-store-server
Застаріла функція
- Стандартно: false
- Тип: Boolean
Дозволяє встановлення лише з сервером сховища. Якщо жоден сервер сховища не запущено, інсталяція завершиться невдало.
strict-store-pkg-content-check
- Стандартно: true
- Тип: Boolean
Деякі реєстри дозволяють публікувати один і той самий контент з різними назвами пакунків та/або версіями. Це порушує перевірку дійсності пакунків у сховищі. Щоб уникнути помилок при перевірці назв і версій таких пакунків у сховищі, ви можете встановити параметр strict-store-pkg-content-check
у значення false
.
Параметри Lockfile
lockfile
- Стандартно: true
- Тип: Boolean
Якщо встановлено false
, pnpm не читатиме та не створюватиме файл pnpm-lock.yaml
.
prefer-frozen-lockfile
- Стандартно: true
- Тип: Boolean
Якщо встановлено значення true
і наявний pnpm-lock.yaml
задовольняє директиві залежностей package.json
, виконується headless встановлення. Встановлення headless пропускає визначення всіх залежностей, оскільки йому не потрібно змінювати файл блокування.
lockfile-include-tarball-url
- Стандартно: false
- Тип: Boolean
Додайте повну URL-адресу tar-файлу пакунка до кожного запису у pnpm-lock.yaml
.
git-branch-lockfile
- Стандартно: false
- Тип: Boolean
Якщо встановлено значення true
, згенерований файл блокування після встановлення буде названо на основі поточної назви гілки, щоб повністю уникнути конфліктів при злитті. Наприклад, якщо поточна назва гілки feature-foo
, то відповідна назва файлу блокування буде pnpm-lock.feature-foo.yaml
замість pnpm-lock.yaml. Зазвичай використовується разом з аргументом командного рядка
--merge-git-branch-lockfilesабо за допомогою параметра
merge-git-branch-lockfiles-branch-patternу файлі
.npmrc`.
merge-git-branch-lockfiles-branch-pattern
- Стандартно: null
- Тип: Array або null
Ця конфігурація відповідає назві поточної гілки, щоб визначити, чи потрібно обʼєднувати всі файли lockfile гілки git. Стандартно вам потрібно вручну передати параметр командного рядка --merge-git-branch-lockfiles
. Ця конфігурація дозволяє автоматично завершити цей процес.
Наприклад:
merge-git-branch-lockfiles-branch-pattern[]=main
merge-git-branch-lockfiles-branch-pattern[]=release*
Ви також можете виключити шаблони за допомогою !
.
peers-suffix-max-length
- Стандартно: 1000
- Тип: number
Максимальна довжина суфікса ідентифікаторів прямих залежностей, що додається до ключів залежностей у файлі блокування. Якщо суфікс довший, він замінюється хешем.
Реєстр та параметри автентифікації
registry
- Стандартно: https://registry.npmjs.org/
- Тип: url**
Базова URL-адреса реєстру пакунків npm (включно з кінцевою косою рискою).