Конфігураційні залежності
Конфігураційні залежності дозволяють вам ділитися і централізовано використовувати конфігураційні файли, налаштування і хуки в декількох проєктах. Вони встановлюються перед усіма звичайними залежностями ("dependencies", "devDependencies", "optionalDependencies"), що робить їх ідеальними для налаштування власних хуків, патчів і записів у каталогах.
Конфігураційні залежності допомагають зберігати всі хуки, налаштування, патчі, перевизначення, каталоги, правила в одному місці і використовувати їх у різних репозиторіях.
Якщо ваша конфігураційна залежність має назву за зразком pnpm-plugin-*
або @*/pnpm-plugin-*
, pnpm автоматично завантажить файл pnpmfile.cjs
з його кореневої теки.
Як додати конфігураційну залежність
Конфігураційні залежності визначені у вашому файлі pnpm-workspace.yaml
і повинні бути встановлені з використанням точної версії та контрольної суми цілісності.
Наприклад, виконання команди pnpm add --config my-configs
додасть цей запис до вашого файлу pnpm-workspace.yaml
:
configDependencies:
my-configs: "1.0.0+sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="
Важливо:
- Конфігураційні залежності не можуть мати власних залежностей.
- Конфігураційні залежності не можуть визначати сценарії життєвого циклу (наприклад,
preinstall
,postinstall
тощо).
Використання
Завантаження списку дозволених вбудованих залежностей
Ви можете завантажити список назв пакунків, які дозволено збирати, за допомогою параметра onlyBuiltDependenciesFile
.
Приклад файлу allow.json
всередині конфігураційної залежності:
[
"@airbnb/node-memwatch",
"@apollo/protobufjs",
...
]
Конфігурація вашого робочого простору:
configDependencies:
'@myorg/trusted-deps': 0.1.0+sha512-IERT0uXPBnSZGsCmoSuPzYNWhXWWnKkuc9q78KzLdmDWJhnrmvc7N4qaHJmaNKIusdCH2riO3iE34Osohj6n8w==
onlyBuiltDependenciesFile: node_modules/.pnpm-config/@myorg/trusted-deps/allow.json
Встановлення залежностей, що використовуються в хуках
Конфігураційні залежності встановлюються перед завантаженням хуків з вашого .pnpmfile.cjs
, що дозволяє вам імпортувати логіку з конфігураційних пакунків.
Приклад:
const { readPackage } = require('.pnpm-config/my-hooks')
module.exports = {
hooks: {
readPackage
}
}
Динамічне оновлення налаштувань pnpm
За допомогою хука updateConfig
ви можете динамічно оновлювати налаштування pnpm за допомогою конфігураційних залежностей.
Наприклад, наступний pnpmfile
додає новий запис catalog до конфігурації pnpm:
module.exports = {
hooks: {
updateConfig (config) {
config.catalogs.default ??= {}
config.catalogs.default['is-odd'] = '1.0.0'
return config
}
}
}
Якщо ви встановлюєте його як конфігураційну залежність:
pnpm add --config @myorg/pnpm-plugin-my-catalogs
Потім можна виконати команду:
pnpm add is-odd@catalog:
Вона встановить is-odd@1.0.0
і додасть наступне до вашого package.json
:
{
"dependencies": {
"is-odd": "catalog:"
}
}
Це спрощує підтримку та обмін централізованими версіями конфігурації та залежностей між проєктами.
Завантаження патчів
Ви можете посилатися на файли виправлень, що зберігаються у конфігураційних залежностях.
Приклад:
configDependencies:
my-patches: "1.0.0+sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="
patchedDependencies:
react: "node_modules/.pnpm-config/my-patches/react.patch"