Перейти до основного вмісту
Версія: 10.x

Конфігураційні залежності

Конфігураційні залежності дозволяють вам ділитися і централізовано використовувати конфігураційні файли, налаштування і хуки в декількох проєктах. Вони встановлюються перед усіма звичайними залежностями ("dependencies", "devDependencies", "optionalDependencies"), що робить їх ідеальними для налаштування власних хуків, патчів і записів у каталогах.

Конфігураційні залежності допомагають зберігати всі хуки, налаштування, патчі, перевизначення, каталоги, правила в одному місці і використовувати їх у різних репозиторіях.

Якщо ваша конфігураційна залежність має назву за зразком pnpm-plugin-* або @*/pnpm-plugin-*, pnpm автоматично завантажить файл pnpmfile.cjs з його кореневої теки.

Як додати конфігураційну залежність​

Конфігураційні залежності визначені у вашому файлі pnpm-workspace.yaml і повинні бути встановлені з використанням точної версії та контрольної суми цілісності.

Наприклад, виконання команди pnpm add --config my-configs додасть цей запис до вашого файлу pnpm-workspace.yaml:

pnpm-workspace.yaml
configDependencies:
my-configs: "1.0.0+sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="

Важливо:

  • Конфігураційні залежності не можуть мати власних залежностей.
  • Конфігураційні залежності не можуть визначати сценарії життєвого циклу (наприклад, preinstall, postinstall тощо).

Використання​

Завантаження списку дозволених вбудованих залежностей​

Ви можете завантажити список назв пакунків, які дозволено збирати, за допомогою параметра onlyBuiltDependenciesFile.

Приклад файлу allow.json всередині конфігураційної залежності:

allow.json
[
"@airbnb/node-memwatch",
"@apollo/protobufjs",
...
]

Конфігурація вашого робочого простору:

pnpm-workspace.yaml
configDependencies:
'@myorg/trusted-deps': 0.1.0+sha512-IERT0uXPBnSZGsCmoSuPzYNWhXWWnKkuc9q78KzLdmDWJhnrmvc7N4qaHJmaNKIusdCH2riO3iE34Osohj6n8w==
onlyBuiltDependenciesFile: node_modules/.pnpm-config/@myorg/trusted-deps/allow.json

Встановлення залежностей, що використовуються в хуках​

Конфігураційні залежності встановлюються перед завантаженням хуків з вашого .pnpmfile.cjs, що дозволяє вам імпортувати логіку з конфігураційних пакунків.

Приклад:

.pnpmfile.cjs
const { readPackage } = require('.pnpm-config/my-hooks')

module.exports = {
hooks: {
readPackage
}
}

Динамічне оновлення налаштувань pnpm​

За допомогою хука updateConfig ви можете динамічно оновлювати налаштування pnpm за допомогою конфігураційних залежностей.

Наприклад, наступний pnpmfile додає новий запис catalog до конфігурації pnpm:

@myorg/pnpm-plugin-my-catalogs/pnpmfile.cjs
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:"
}
}

Це спрощує підтримку та обмін централізованими версіями конфігурації та залежностей між проєктами.

Завантаження патчів​

Ви можете посилатися на файли виправлень, що зберігаються у конфігураційних залежностях.

Приклад:

pnpm-workspace.yaml
configDependencies:
my-patches: "1.0.0+sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="
patchedDependencies:
react: "node_modules/.pnpm-config/my-patches/react.patch"