plugin.json или в записи на marketplace. По умолчанию зависимость отслеживает последнюю доступную версию, поэтому вышестоящий выпуск может изменить зависимость в вашем плагине без предупреждения. Ограничения версий позволяют удерживать зависимость на протестированном диапазоне версий до тех пор, пока вы не решите перейти на новую версию.
Когда вы устанавливаете плагин, который объявляет зависимости, Claude Code автоматически разрешает и устанавливает их, а также выводит список добавленных зависимостей в конце вывода установки. Если зависимость позже исчезнет, /reload-plugins и фоновое автоматическое обновление плагина переустановят её при условии, что её marketplace уже находится в ваших настроенных marketplaces. Повторный запуск claude plugin install для зависимого плагина или добавление marketplace с помощью claude plugin marketplace add также разрешит любые оставшиеся отсутствующие зависимости. Зависимости из marketplace, который вы не добавили, остаются неразрешёнными.
Это руководство предназначено для авторов плагинов, которые объявляют зависимости в plugin.json, и для администраторов marketplace, которые помечают выпуски. Чтобы установить плагины с зависимостями, см. Обнаружение и установка плагинов. Полную схему манифеста см. в справочнике плагинов.
Ограничения версий зависимостей требуют Claude Code v2.1.110 или более поздней версии.
Почему нужно ограничивать версии зависимостей
Рассмотрим внутренний marketplace, где две команды публикуют плагины. Команда платформы поддерживаетsecrets-vault, MCP-сервер, который оборачивает бэкенд секретов. Команда развертывания поддерживает deploy-kit, который вызывает secrets-vault для получения учетных данных во время развертывания.
deploy-kit протестирован для работы с secrets-vault v2.1.0. Без ограничения версии при следующем выпуске платформенной команды, который переименовывает MCP-инструмент, автоматическое обновление переместит secrets-vault каждого инженера на новую версию, и deploy-kit сломается.
С ограничением версии deploy-kit объявляет, что ему нужен secrets-vault в диапазоне ~2.1.0. Инженеры с установленным deploy-kit остаются на самой высокой соответствующей версии 2.1.x. Команда развертывания обновляется по собственному графику, публикуя новую версию deploy-kit с более широким ограничением.
Объявление зависимости с ограничением версии
Перечислите зависимости в массивеdependencies файла .claude-plugin/plugin.json вашего плагина. Каждая запись — это либо имя плагина, либо объект с ограничением версии.
Следующий манифест объявляет одну зависимость без версии и одну зависимость с ограничением:
.claude-plugin/plugin.json
"audit-logger" в примере выше, которая зависит от любой версии, которую предоставляет marketplace этого плагина. Для большего контроля используйте объект с этими полями:
| Поле | Тип | Описание |
|---|---|---|
name | string | Имя плагина. Разрешается в том же marketplace, что и объявляющий плагин. Обязательно. |
version | string | Диапазон semver, такой как ~2.1.0, ^2.0, >=1.4 или =2.1.0. Зависимость получается в самой высокой помеченной версии, которая удовлетворяет этому диапазону. |
marketplace | string | Другой marketplace для разрешения name. Кросс-marketplace зависимости блокируются, если целевой marketplace не указан в allowCrossMarketplaceDependenciesOn в marketplace.json корневого marketplace. |
version принимает любое выражение, поддерживаемое пакетом semver Node, включая диапазоны с каретой, тильдой, дефисом и компаратором. Версии предварительного выпуска, такие как 2.0.0-beta.1, исключаются, если ваш диапазон не выбирает их с суффиксом предварительного выпуска, например ^2.0.0-0.
Зависимость от плагина из другого marketplace
По умолчанию Claude Code отказывается автоматически устанавливать зависимость, которая находится в другом marketplace, чем плагин, который ее объявляет. Это предотвращает молчаливое извлечение плагинов из источника, который вы не проверили. Чтобы это разрешить, администратор корневого marketplace добавляет имя целевого marketplace вallowCrossMarketplaceDependenciesOn в marketplace.json. Корневой marketplace — это тот, который размещает плагин, который устанавливает пользователь; проверяется только его список разрешений, поэтому доверие не распространяется через промежуточные marketplace.
Следующий marketplace.json позволяет deploy-kit зависеть от плагина из acme-shared:
.claude-plugin/marketplace.json
cross-marketplace, указывающей на поле для установки. Пользователи все еще могут установить зависимость вручную в первую очередь, что удовлетворяет ограничению без изменения списка разрешений.
Помечание выпусков плагинов для разрешения версий
Ограничения версий разрешаются относительно git-тегов в репозитории marketplace. Чтобы Claude Code мог найти доступные версии зависимости, выпуски вышестоящего плагина должны быть помечены с использованием определенного соглашения об именовании. Помечайте каждый выпуск как{plugin-name}--v{version}, где {version} соответствует полю version в plugin.json этого коммита. Из директории плагина выполните:
claude plugin tag выводит имя тега из манифеста плагина и записи marketplace, которая его содержит. Перед созданием тега она проверяет содержимое плагина, убеждается, что plugin.json и запись marketplace согласны по версии, требует чистого рабочего дерева в директории плагина и отказывает, если тег уже существует. Добавьте --dry-run, чтобы увидеть, что будет помечено, без его создания. Прямое выполнение git tag secrets-vault--v2.1.0 эквивалентно, если вы сами поддерживаете синхронизацию plugin.json и записи marketplace.
Префикс имени плагина позволяет одному репозиторию marketplace размещать несколько плагинов с независимыми линиями версий. Разделитель --v анализируется как совпадение префикса на полное имя плагина, поэтому имена плагинов, содержащие дефисы, обрабатываются правильно.
Когда вы устанавливаете плагин, который объявляет { "name": "secrets-vault", "version": "~2.1.0" }, Claude Code выводит список тегов marketplace, фильтрует те, которые начинаются с secrets-vault--v, и получает самую высокую версию, удовлетворяющую ~2.1.0. Если соответствующий тег не существует, зависимый плагин отключается с ошибкой, в которой перечислены доступные версии.
Разрешенный тег semver записывается отдельно от version в plugin.json, поэтому проверки ограничений используют тег, который был фактически получен, даже если plugin.json в этом коммите имеет устаревшее значение. Имя директории кэша для установки с разрешением тега включает суффикс commit-SHA из 12 символов, поэтому если разработчик принудительно переместит тег на другой коммит, следующая установка получит свежую директорию кэша вместо повторного использования устаревшего содержимого.
Для источников marketplace
npm ограничение не контролирует, какая версия получается, так как разрешение на основе тегов применяется только к источникам, поддерживаемым git. Ограничение все еще проверяется во время загрузки, и зависимый плагин отключается с dependency-version-unsatisfied, если установленная версия не удовлетворяет ему.Как ограничения взаимодействуют
Когда несколько установленных плагинов ограничивают одну и ту же зависимость, Claude Code пересекает их диапазоны и разрешает зависимость на самую высокую версию, которая удовлетворяет всем из них. Таблица ниже показывает, как разрешаются общие комбинации.| Плагин A требует | Плагин B требует | Результат |
|---|---|---|
^2.0 | >=2.1 | Одна установка на самый высокий тег 2.x на уровне или выше 2.1.0. Оба плагина загружаются. |
~2.1 | ~3.0 | Установка плагина B завершается с ошибкой range-conflict. Плагин A и зависимость остаются как они были. |
=2.1.0 | none | Зависимость остается на 2.1.0. Автоматическое обновление пропускает более новые версии, пока установлен плагин A. |
/doctor и на вкладке Errors в /plugin, указывая на ограничивающий плагин.
Когда вы удаляете последний плагин, который ограничивает зависимость, зависимость больше не удерживается и возобновляет отслеживание записи marketplace при следующем обновлении.
Включение или отключение плагина с зависимостями
Включение плагина также включает плагины, от которых он зависит, и отключение плагина блокируется, если другой включенный плагин все еще нуждается в нем. Оба поведения требуют Claude Code v2.1.143 или более поздней версии. Более ранние версии включают или отключают только названный плагин и выводят ошибкуdependency-unsatisfied при следующей загрузке.
Когда вы включаете плагин, Claude Code также включает его зависимости в той же области. Если зависимость имеет свои собственные зависимости, Claude Code включает и их. Сообщение об успехе выводит список того, что еще было включено вместе с плагином, который вы назвали. Если зависимость не может быть включена, команда отказывает и сообщает вам, что блокирует и как это исправить:
| Условие | Результат |
|---|---|
| Зависимость не установлена | Включение завершается с ошибкой и выводит команду claude plugin install для каждой отсутствующей зависимости. |
| Зависимость заблокирована политикой плагинов вашей организации | Включение завершается с ошибкой и указывает на заблокированную зависимость. |
Зависимость установлена на false в области с более высоким приоритетом, чем целевая область | Включение завершается с ошибкой. Включите зависимость в этой области или передайте --scope для записи там. |
| Все зависимости установлены и разрешены | Включение успешно и записывает true для плагина и каждой зависимости, которая еще не была включена в целевой области. |
defaultEnabled: false в своем манифесте, потому что Claude Code записывает явное true для нее. То же самое применяется при установке: зависимость, подключенная для удовлетворения активного плагина, устанавливается с true независимо от своего собственного значения по умолчанию.
Когда вы отключаете плагин, Claude Code отказывает, если другой включенный плагин все еще зависит от него. Ошибка указывает на плагины, которые зависят от него, и дает вам цепную команду, которая отключает их в правильном порядке, заканчивая тем, который вы запросили.
Например, если deploy-kit зависит от secrets-vault, отключение только secrets-vault завершается с ошибкой с выводом, похожим на следующий:
Удаление осиротевших автоматически установленных зависимостей
Автоматически установленные зависимости остаются на диске после удаления плагинов, которые их установили, на случай, если вы переустановите зависимый плагин или захотите продолжить использование зависимости напрямую. Чтобы очистить их, запуститеclaude plugin prune для вывода списка автоматически установленных зависимостей, которые больше не требуются ни одним установленным плагином, и удалите их после подтверждения. Это требует Claude Code v2.1.121 или более поздней версии.
--scope project или --scope local для выбора другой области. Передайте --dry-run для вывода списка того, что будет удалено, без внесения изменений. Передайте -y для пропуска подтверждения. Когда stdin или stdout не является терминалом, prune выводит список осиротевших зависимостей и выходит без их удаления, если не передана -y.
Чтобы выполнить prune как часть удаления, передайте --prune в claude plugin uninstall. После удаления названного плагина Claude Code сканирует и удаляет любые автоматически установленные зависимости, которые теперь осиротели. Плагины, которые вы установили сами, никогда не удаляются, только те, которые были установлены автоматически через массив dependencies другого плагина.
Например, чтобы удалить deploy-kit и очистить зависимости, которые он оставляет:
Разрешение ошибок зависимостей
Проблемы с зависимостями появляются вclaude plugin list, в интерфейсе /plugin и в /doctor. Затронутый плагин отключается до тех пор, пока вы не разрешите ошибку. Наиболее распространенные ошибки и их исправления перечислены ниже.
| Ошибка | Значение | Как разрешить |
|---|---|---|
dependency-unsatisfied | Объявленная зависимость не установлена, или она установлена, но отключена. | Запустите команду claude plugin install, показанную в сообщении об ошибке. Если marketplace зависимости еще не настроен, добавьте его с помощью claude plugin marketplace add, и Claude Code разрешит зависимость автоматически. Если зависимость отключена, включите её. |
range-conflict | Требования к версии для зависимости не могут быть объединены. Сообщение об ошибке указывает причину: ни одна версия не удовлетворяет всем диапазонам, диапазон не является действительным синтаксисом semver, или объединенные диапазоны слишком сложны для пересечения. | Удалите или обновите один из конфликтующих плагинов, исправьте любую неправильную строку version, упростите длинные цепочки || или попросите вышестоящего автора расширить его ограничение. |
dependency-version-unsatisfied | Версия установленной зависимости находится вне объявленного диапазона этого плагина. | Запустите claude plugin install <dependency>@<marketplace> для повторного разрешения зависимости относительно всех текущих ограничений. |
no-matching-tag | Репозиторий зависимости не имеет тега {name}--v*, удовлетворяющего диапазону. | Проверьте, что вышестоящий помечен выпусками, используя соглашение выше, или ослабьте ваш диапазон. |
claude plugin list --json и прочитайте поле errors для каждого плагина.
См. также
- Создание плагинов: создавайте плагины с skills, agents и hooks
- Создание и распространение marketplace плагинов: размещайте плагины для вашей команды
- Справочник плагинов: полная схема
plugin.json - Управление версиями: как разрешается версия самого плагина и используется в качестве ключа кэша