.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
Added in: v8.14.0
- Ст андартно: false
- Тип: 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*
You may also exclude patterns from hoisting using !
.
Наприклад:
hoist-pattern[]=*types*
hoist-pattern[]=!@types/react
public-hoist-pattern
- Default: ['*eslint*', '*prettier*']
- Тип: string[]
На відміну від hoist-pattern
, який підіймає залежності до прихованої теки модулів у віртуальному сховищі, public-hoist-pattern
підіймає залежності, що відповідають шаблону, до кореневої теки модулів. Підняття до кореневої теки модулів означає, що код застосунку матиме доступ до фантомних залежностей, навіть якщо вони неправильно змінять стратегію розвʼязання.
Цей параметр корисний при роботі з деякими недосконалими інструментами, що підключаються, які не обробляють залежності належним чином.
Наприклад:
public-hoist-pattern[]=*plugin*
Зауваження: Встановлення shamefully-hoist
у true
аналогічно встановленню public-hoist-pattern
у *
.
You may also exclude patterns from hoisting using !
.
Наприклад:
public-hoist-pattern[]=*types*
public-hoist-pattern[]=!@types/react
shamefully-hoist
- Стандартно: false
- Тип: Boolean
Стандартно pnpm створює напівжорстку теку node_modules
, тобто залежності мають доступ до неоголошених залежностей, а модулі поза межами node_modules
- ні. За такої схеми більшість пакунків в екосистемі працюють без проблем. Однак, якщо деякі інструменти працюють лише тоді, коли підняті залежності знаходяться у корені node_modules
, ви можете встановити цей параметр у true
, щоб підняти їх для вас.
Параметри модулів
store-dir
- Стандартно:
- If the $PNPM_HOME env variable is set, then $PNPM_HOME/store
- Якщо встановлено змінну $XDG_DATA_HOME env, то $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 копіюватиме пакунки зі сховища, а не звʼязуватиме їх жорсткими посиланнями, оскільки жорсткі посилання можливі лише у тій самій файловій системі.
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
як ваш компонувальник.
symlink
- Стандартно: 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
. Це зробить трасування стеку чистішим, оскільки шляхи до залежностей будуть на одну теку вище.
ПРИМІТКА: віртуальне сховище не може бути спільним для декількох проєктів. Кожен проєкт повинен мати власне віртуальне сховище (за винятком робочих просторів, де корінь є спільним).
package-import-method
- Стандартно: auto
- Тип: auto, hardlink, copy, clone, clone-or-copy
Керує способом імпорту пакунків зі сховища (якщо ви хочете вимкнути symlinks всередині node_modules
, то вам потрібно змінити параметр node-linker, а не цей).
- auto — спробувати клонувати пакунки зі сховища. Якщо клонування не підтримується, встановіть жорстке посилання на пакунки зі сховища. Якщо ані клонування, ані звʼязування неможливі, поверніться до копіювання
- hardlink — жорстке посилання на пакунки зі сховища
- clone-or-copy — спробувати клонувати пакунки зі сховища. Якщо клонування не підтримується, поверніться до копіювання
- copy — скопіювати пакунки зі сховища
- clone —клонувати (AKA copy-on-write або за посиланням) пакунки зі сховища
Клонування — найкращий спосіб запису пакунків у node_modules. Це найшвидший і найбезпечніший спосіб. Коли використовується клонування, ви можете редагувати файли у ваших node_modules, і вони не будуть змінені у центральному сховищі з адресованим вмістом.
На жаль, не всі файлові системи підтримують клонування. Ми рекомендуємо використовувати файлову систему з копіюванням при записі (CoW) (наприклад, Btrfs замість Ext4 в Linux) для найкращого досвіду роботи з pnpm.
modules-cache-max-age
- Стандартно: 10080 (7 днів в хвилинах)
- Тип: number
Час у хвилинах, через який слід видалити порожні пакунки з теки модулів. pnpm зберігає кеш пакунків у теці модулів. Це підвищує швидкість встановлення при перемиканні гілок або пониженню версій залежностей.
Параметри 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
When set to true
, the generated lockfile name after installation will be named based on the current branch name to completely avoid merge conflicts. Наприклад, якщо поточна назва гілки feature-foo
, то відповідна назва файлу блокування буде pnpm-lock.feature-foo.yaml
замість pnpm-lock.yaml
. It is typically used in conjunction with the command line argument --merge-git-branch-lockfiles
or by setting merge-git-branch-lockfiles-branch-pattern
in the .npmrc
file.
merge-git-branch-lockfiles-branch-pattern
- Стандартно: null
- Тип: Array або null
This configuration matches the current branch name to determine whether to merge all git branch lockfile files. By default, you need to manually pass the --merge-git-branch-lockfiles
command line parameter. This configuration allows this process to be automatically completed.
Наприклад:
merge-git-branch-lockfiles-branch-pattern[]=main
merge-git-branch-lockfiles-branch-pattern[]=release*
Ви також можете виключити шаблони за допомогою !
.
Реєстр та параметри автентифікації
registry
- Стандартно: https://registry.npmjs.org/
- Тип: url
The base URL of the npm package registry (trailing slash included).
<scope>:registry
The npm registry that should be used for packages of the specified scope. For example, setting @babel:registry=https://example.com/packages/npm/
will enforce that when you use pnpm add @babel/core
, or any @babel
scoped package, the package will be fetched from https://example.com/packages/npm
instead of the default registry.
<URL>:_authToken
Define the authentication bearer token to use when accessing the specified registry. Наприклад:
//registry.npmjs.org/:_authToken=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
You may also use an environment variable. Наприклад:
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
Або ви можете використовувати змінну оточення безпосередньо, не змінюючи .npmrc
взагалі:
npm_config_//registry.npmjs.org/:_authToken=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
<URL>:tokenHelper
A token helper is an executable which outputs an auth token. This can be used in situations where the authToken is not a constant value but is something that refreshes regularly, where a script or other tool can use an existing refresh token to obtain a new access token.
The configuration for the path to the helper must be an absolute path, with no arguments. In order to be secure, it is only permitted to set this value in the user .npmrc
. Otherwise a project could place a value in a project's local .npmrc
and run arbitrary executables.
Setting a token helper for the default registry:
tokenHelper=/home/ivan/token-generator
Setting a token helper for the specified registry:
//registry.corp.com:tokenHelper=/home/ivan/token-generator
Налаштування запиту
ca
- Стандартно: Сертифікат npm CA
- Тип: String, Array або null
Сертифікат підпису центру сертифікації, якому довіряють для SSL-зʼєднань з реєстром. Значення повинні бути у форматі PEM (також відомий як «Base-64 кодований X.509 (.CER)»). Наприклад:
ca="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----"
Встановіть значення null, щоб дозволити довіряти лише відомим реєстраторам, або певному сертифікату ЦС, щоб довіряти лише цьому конкретному центру сертифікації підписів.
Можна довіряти декільком центрам сертифікації, вказавши масив сертифікатів:
ca[]="..."
ca[]="..."
Дивіться також конфігурацію strict-ssl
.
cafile
- Стандартно: null
- Тип: path
Шлях до файлу, що містить один або декілька сертифікатів підпису центру сертифікації. Подібно до параметра ca
, але дозволяє використовувати декілька центрів сертифікації, а також зберігати інформацію про центри сертифікації у файлі замість того, щоб вказувати її за допомогою CLI.
cert
- Стандартно: null
- Тип: String
Клієнтський сертифікат, який потрібно передати при доступі до реєстру. Значення повинні бути у форматі PEM (також відомий як «Base-64 кодований X.509 (.CER)»). Наприклад:
cert="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----"
It is not the path to a certificate file (and there is no certfile
option).
key
- Стандартно: null
- Тип: String
Ключ клієнта, який потрібно п ередати при доступі до реєстру. Значення повинні бути у форматі PEM (також відомий як «Base-64 кодований X.509 (.CER)»). Наприклад:
key="-----BEGIN PRIVATE KEY-----\nXXXX\nXXXX\n-----END PRIVATE KEY-----"
Це не шлях до файлу ключа (і немає параметра keyfile
).
Цей параметр містить конфіденційну інформацію. Не записуйте його до локального файлу .npmrc
, зафіксованого у репозиторії.
git-shallow-hosts
- Стандартно: ['github.com', 'gist.github.com', 'gitlab.com', 'bitbucket.com', 'bitbucket.org']
- Тип: string[]
Під час отримання залежностей, які є Git-репозиторіями, якщо хост вказано у цьому параметрі, pnpm використовуватиме неглибоке клонування, щоб отримати лише потрібний комміт, а не всю історію.
https-proxy
- Стандартно: null
- Тип: url
Проксі-сервер для вихідних HTTPS-запитів. Якщо встановлено змінні оточення HTTPS_PROXY
, https_proxy
, HTTP_PROXY
або http_proxy
, замість них буде використано їхні значення.
If your proxy URL contains a username and password, make sure to URL-encode them. Наприклад:
https-proxy=https://use%21r:pas%2As@my.proxy:1234/foo
Do not encode the colon (:
) between the username and password.
http-proxy
proxy
- Стандартно: null
- Тип: url
Проксі для вихідних http-запитів. Якщо встановлено змінні оточення HTTP_PROXY або http_proxy, налаштування проксі будуть враховані базовою бібліотекою запитів.
local-address
- Стандартно: undefined
- Тип: IP Address
IP-адреса локального інтерфейсу для підключення до реєстру npm.
maxsockets
- Стандартно: network-concurrency x 3
- Тип: Number
Максимальна кількість зʼєднань, які можна використовувати для одного джерела (комбінація протокол/хост/порт).
noproxy
- Стандартно: null
- Тип: String
Розділений комами рядок розширень доменів, для яких не слід використовувати проксі-сервер.
strict-ssl
- Стандартно: true
- Тип: Boolean
Чи потрібно робити перевірку SSL-ключів при запитах до реєстру через HTTPS.
Дивіться також параметр ca
.
network-concurrency
- Стандартно: 16
- Тип: Number
Контролює максимальну кількість запитів HTTP(S) для одночасної обробки.
fetch-retries
- Стандартно: 2
- Тип: Number
Скільки разів повторити спробу, якщо pnpm не вдається отримати дані з реєстру.
fetch-retry-factor
- Стандартно: 10
- Тип: Number
Експоненціальний коефіцієнт для повторної спроби.
fetch-retry-mintimeout
- Стандартно: 10000 (10 секунд)
- Тип: Number
Мінімальний (базовий) тайм-аут для повторних запитів.
fetch-retry-maxtimeout
- Стандартно: 60000 (1 хвилина)
- Тип: Number
Максимальний таймаут очікування, щоб гарантувати, що фактор повторних спроб не робить запити занадто довгими.
fetch-timeout
- Стандартно: 60000 (1 хвилина)
- Тип: Number
Максимальний час очікування виконання HTTP-запитів.
Параметри прямих залежностей
auto-install-peers
- Стандартно: true
- Тип: Boolean
Якщо true
, всі відсутні необовʼязкові прямі залежності будуть автоматично встановлені.
Конфлікт версій
Якщо існують суперечливі вимоги до версій для прямої залежності з різних пакунків, pnpm не встановлюватиме автоматично жодну з версій суперечливої прямої залежності. Натомість виводиться попередження. Наприклад, якщо одна залежність вимагає react@^16.0.0
, а інша - react@^17.0.0
, ці вимоги конфліктують, і автоматичного встановлення не відбудеться.
Розвʼязання конфліктів
У випадку конфлікту версій вам потрібно буде визначити, яку версію прямої залежності встановити самостійно, або оновити залежності, щоб узгодити їхні вимоги до прямих залежностей.
dedupe-peer-dependents
- Стандартно: true
- Тип: Boolean
When this setting is set to true
, packages with peer dependencies will be deduplicated after peers resolution.
For instance, let's say we have a workspace with two projects and both of them have webpack
in their dependencies. webpack
has esbuild
in its optional peer dependencies, and one of the projects has esbuild
in its dependencies. In this case, pnpm will link two instances of webpack
to the node_modules/.pnpm
directory: one with esbuild
and another one without it:
node_modules
.pnpm
webpack@1.0.0_esbuild@1.0.0
webpack@1.0.0
project1
node_modules
webpack -> ../../node_modules/.pnpm/webpack@1.0.0/node_modules/webpack
project2
node_modules
webpack -> ../../node_modules/.pnpm/webpack@1.0.0_esbuild@1.0.0/node_modules/webpack
esbuild
This makes sense because webpack
is used in two projects, and one of the projects doesn't have esbuild
, so the two projects cannot share the same instance of webpack
. However, this is not what most developers expect, especially since in a hoisted node_modules
, there would only be one instance of webpack
. Therefore, you may now use the dedupe-peer-dependents
setting to deduplicate webpack
when it has no conflicting peer dependencies (explanation at the end). In this case, if we set dedupe-peer-dependents
to true
, both projects will use the same webpack
instance, which is the one that has esbuild
resolved:
node_modules
.pnpm
webpack@1.0.0_esbuild@1.0.0
project1
node_modules
webpack -> ../../node_modules/.pnpm/webpack@1.0.0_esbuild@1.0.0/node_modules/webpack
project2
node_modules
webpack -> ../../node_modules/.pnpm/webpack@1.0.0_esbuild@1.0.0/node_modules/webpack
esbuild
What are conflicting peer dependencies? By conflicting peer dependencies we mean a scenario like the following one:
node_modules
.pnpm
webpack@1.0.0_react@16.0.0_esbuild@1.0.0
webpack@1.0.0_react@17.0.0
project1
node_modules
webpack -> ../../node_modules/.pnpm/webpack@1.0.0/node_modules/webpack
react (v17)
project2
node_modules
webpack -> ../../node_modules/.pnpm/webpack@1.0.0_esbuild@1.0.0/node_modules/webpack
esbuild
react (v16)
In this case, we cannot dedupe webpack
as webpack
has react
in its peer dependencies and react
is resolved from two different versions in the context of the two projects.
strict-peer-dependencies
- Стандартно: false
- Тип: Boolean
Якщо цей параметр увімкнено, команди не будуть виконуватися, якщо у дереві відсутня або невірна залежність від прямої залежності.
resolve-peers-from-workspace-root
- Стандартно: true
- Тип: Boolean
Якщо увімкнено, залежності кореневого проєкту робочої області використовуються для розвʼязання прямих залежностей будь-яких проєктів у робочій області. Це корисна функція, оскільки ви можете встановлювати прямі залежності лише у корені робочого простору, і ви можете бути впевнені, що всі проєкти у робочому просторі використовують однакові версії прямих залежностей.
Параметри CLI
[no-]color
- Стандартно: auto
- Тип: auto, always, never
Керує кольорами у виводі.
- auto — вивід використовує кольори, коли стандартним виводом є термінал або TTY.
- always — ігнорувати різницю між терміналами та пайпами. У більшості сценаріїв, якщо вам потрібні кольорові коди у перенаправленому виводі, ви можете замість цього передати команді pnpm прапорець
--color
, щоб змусити її використовувати кольорові коди. Стандартні налаштування майже завжди відповідають вашим потребам. - never — вимикає кольори. Цей параметр використовується для
--no-color
.
loglevel
- Стандартно: info
- Тип: debug, info, warn, error
Будуть показані всі журнали вказаного рівня або вище. Замість цього ви можете передати --silent
, щоб вимкнути всі журнали виводу.
use-beta-cli
- Стандартно: false
- Тип: Boolean
Експериментальна опція, яка дозволяє використовувати бета-функції CLI. Це означає, що ви можете отримати деякі зміни у функціоналі CLI, які є порушеннями або потенційними помилками.
recursive-install
- Стандартно: true
- Тип: Boolean
Якщо цей параметр увімкнено, основною поведінкою pnpm install
стане поведінка pnpm install -r
, тобто встановлення буде виконано до всіх пакунків робочого простору або вкладених тек.
Інакше, pnpm install
збиратиме пакунок виключно у поточній теці.
engine-strict
- Стандартно: false
- Тип: Boolean
Якщо цей параметр увімкнено, pnpm не встановлюватиме пакунки, які стверджують, що вони несумісні з поточною версією Node.
Незалежно від цієї конфігурації, встановлення завжди завершиться невдачею, якщо проєкт (не залежність) вкаже несумісну версію у своєму полі engines
.
npm-path
- Тип: path
Розташування бінарного файлу npm, який pnpm використовує для деяких дій, таких як публікація.
Параметри збирання
ignore-scripts
- Стандартно: false
- Тип: Boolean
Не виконувати будь-які скрипти, визначені в package.json
проєкту та його залежностях.
Цей прапорець не перешкоджає виконанню .pnpmfile.cjs
ignore-dep-scripts
- Стандартно: false
- Тип: Boolean
Не виконувати жодних скриптів встановлених пакунків. Скрипти проєктів виконуються.
child-concurrency
- Стандартно: 5
- Тип: Number
Максимальна кількість дочірніх процесів, які можна одночасно виділити для збірки node_modules.
side-effects-cache
- Стандартно: true
- Тип: Boolean
Використовувати та кешувати результати хуків (пре/пост)встановлення.
side-effects-cache-readonly
- Стандартно: false
- Тип: Boolean
Використовувати кеш побічних ефектів лише за наявності, не створювати його для нових пакунків.
unsafe-perm
- Стандартно: false, ЯКЩО запуск від імені користувача root, ТОДІ — true
- Тип: Boolean
Встановіть значення true, щоб увімкнути перемикання UID/GID під час запуску скриптів пакунків. Якщо явно вказати значення false, то встановлення від імені не root-користувача не вдасться.