Налаштування (pnpm-workspace.yaml)
pnpm отримує свою конфігурацію з командного рядка, змінних оточення, файлівpnpm-workspace.yaml
та .npmrc
.
Команду pnpm config
можна використовувати для читання та редагування вмісту файлів проєкту та файлів глобальної конфігурації.
Відповідні конфігураційні файли:
- Конфігураційний файл для кожного проєкту:
/path/to/my/project/pnpm-workspace.yaml
- Глобальний файл конфігурації:
~/.config/pnpm/rc
([INI-форматований] список параметрівkey = value
)
Параметри, пов’язані з авторизацією, обробляються системою конфігурації npm. Отже, pnpm config set registry=<value>
фактично збереже параметр у глобальний файл конфігурації npm.
Значення у файлах конфігурації можуть містити змінні env із використанням синтаксису ${NAME}
. Змінні env також можуть бути вказані зі стандартними значеннями. Використання ${NAME-fallback}
поверне fallback
, якщо NAME
не задано. ${NAME:-fallback}
поверне fallback
, якщо NAME
не задано або є порожнім рядком.
Розвʼязання залежностей
overrides
У цьому полі ви можете вказати pnpm перевизначити будь-яку залежність у графі залежностей. Це корисно для того, щоб змусити всі ваші пакунки використовувати одну версію залежності, перенести виправлення, замінити залежність форком або видалити невикористовувану залежність.
Зверніть увагу, що поле перевизначень можна встановити лише у корені проєкту.
Приклад поля overrides
:
overrides:
"foo": "^1.0.0"
"quux": "npm:@myorg/quux@^1.0.0"
"bar@^2.1.0": "3.0.0"
"qar@1>zoo": "2"
Ви можете вказати пакунок, до якого належить перевизначена залежність, відокремивши селектор пакунка від селектора залежності символом ">", наприклад, qar@1>zoo
перевизначить лише залежність zoo
пакунка qar@1
, а не будь-які інші залежності.
Перевизначення можна визначити як посилання на специфікацію прямої залежності.
Це досягається шляхом додавання до імені залежності префікса $
:
{
"dependencies": {
"foo": "^1.0.0"
}
}
overrides:
foo: "$foo"
Пакунок, на який посилаються, не обовʼязково повинен збігатися з пакунком, на який посилається перевизначений:
overrides:
bar: "$foo"
Якщо ви вважаєте, що використання певного пакунка не потребує однієї з його залежностей, ви можете використовувати -
, щоб вилучити її. Наприклад, якщо пакунок foo@1.0.0
потребує великого пакунка з назвою bar
для функції, яку ви не використовуєте, вилучення цього пакунка може скоротити час встановлення:
overrides:
"foo@1.0.0>bar": "-"
Ця можливість особливо корисна для optionalDependencies
, де більшість необовʼязкових пакунків можна безпечно пропустити.
packageExtensions
Поля packageExtensions
надають можливість розширити наявні визначення пакунків додатковою інформацією. Наприклад, якщо react-redux
повинен мати react-dom
у своїх peerDependencies
, але не має, можна виправити react-redux
за допомогою packageExtensions
:
packageExtensions:
react-redux:
peerDependencies:
react-dom: "*"
Ключами у packageExtensions
є назви пакунків або назви пакунків і діапазони semver, тому можна виправити лише деякі версії пакунків:
packageExtensions:
react-redux@1:
peerDependencies:
react-dom: "*"
Наступні поля можна розширити за допомогою packageExtensions
: dependencies
, optionalDependencies
, peerDependencies
і peerDependenciesMeta
.
Більший приклад:
packageExtensions:
express@1:
optionalDependencies:
typescript: "2"
fork-ts-checker-webpack-plugin:
dependencies:
"@babel/core": "1"
peerDependencies:
eslint: ">= 6"
peerDependenciesMeta:
eslint: {
optional: true
Разом з Yarn ми підтримуємо базу даних packageExtensions
для виправлення несправних пакунків в екосистемі.
Якщо ви використовуєте packageExtensions
, подумайте про те, щоб надіслати PR і внести ваше розширення до бази даних @yarnpkg/extensions
.
allowedDeprecatedVersions
Цей параметр дозволяє вимкнути попередження про застарілість певних пакунків.
Приклад:
allowedDeprecatedVersions:
express: "1"
request: "*"
У наведеній вище конфігурації pnpm не виводитиме попередження про застарілість для будь-якої версії request
і для v1 express
.
updateConfig
updateConfig.ignoreDependencies
Іноді ви не можете оновити залежність. Наприклад, остання версія залежності почала використовувати ESM, але ваш проєкт ще не в ESM. На жаль, такий пакунок завжди буде виведено командою pnpm outdated
і оновлено при виконанні pnpm update --latest
. Втім, ви можете перелічити пакунки, які не потрібно оновлювати, у полі ignoreDependencies
:
updateConfig: {
ignoreDependencies:
- load-json-file
Також підтримуються шаблони, тому ви можете ігнорувати будь-які пакунки з області видимості: @babel/*
.
supportedArchitectures
Ви можете вказати архітектури, для яких ви хочете встановити необовʼязкові залежності, навіть якщо вони не відповідають архітектурі системи, на якій виконується встановлення.
Наприклад, у наведеній нижче конфігурації вказано встановити необовʼязкові залежності для Windows x64:
supportedArchitectures:
os:
- win32
cpu:
- x64
Тоді як ця конфігурація встановить необовʼязкові залежності для Windows, macOS та архітектури системи, на якій наразі виконується встановлення. Вона включає артефакти як для x64, так і для arm64 процесорів:
supportedArchitectures:
os:
- win32
- darwin
- current
cpu:
- x64
- arm64
Крім того, supportedArchitectures
також підтримує вказівку libc
системи.
ignoredOptionalDependencies
Якщо необовʼязкова залежність має імʼя у цьому масиві, її буде пропущено. Наприклад:
ignoredOptionalDependencies:
- fsevents
- "@esbuild/*"