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

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

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

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

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

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

Приклад:

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

Важливо:

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

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

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

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

Приклад файлу allow.json всередині конфігураційної залежності (@pnpm/trusted-deps):

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

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

pnpm-workspace.yaml
configDependencies:
'@pnpm/trusted-deps': 0.1.0+sha512-IERT0uXPBnSZGsCmoSuPzYNWhXWWnKkuc9q78KzLdmDWJhnrmvc7N4qaHJmaNKIusdCH2riO3iE34Osohj6n8w==
onlyBuiltDependenciesFile: node_modules/.pnpm-config/@pnpm/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:

my-catalogs/pnpmfile.cjs
module.exports = {
hooks: {
updateConfig (config) {
config.catalogs.default ??= {}
config.catalogs.default['is-odd'] = '1.0.0'
return config
}
}
}

Встановіть і завантажте його:

pnpm-workspace.yaml
configDependencies:
my-catalogs: "1.0.0+sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="
pnpmfile: "node_modules/.pnpm-config/my-catalogs/pnpmfile.cjs"

Потім можна виконати команду:

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"