Spec-Zone.ru › Composer

Приоритеты репозиториев

Канонические репозитории

Когда Composer разрешает зависимости, он ищет заданный пакет в самом верхнем репозитории. Если этот репозиторий не содержит пакет, он переходит к следующему, пока один из репозиториев не содержит его, и процесс завершается.

Канонические репозитории предпочтительнее по нескольким причинам:

  • С точки зрения производительности, более эффективно прекратить поиск пакета после его обнаружения. Это также предотвращает загрузку дублированных пакетов, если один и тот же пакет присутствует в нескольких репозиториях.
  • С точки зрения безопасности, безопаснее рассматривать их канонически, так как это означает, что пакеты, которые, как ожидается, будут поступать из ваших самых важных репозиториев, никогда не будут загружаться из другого репозитория вместо них. Предположим, у вас есть частный репозиторий, который не является каноническим, и вам нужен ваш частный пакет foo/bar ^2.0 , например. Теперь, если кто-то опубликует foo/bar 2.999 в packagist.org, Composer внезапно выберет этот пакет, так как у него более новая версия, чем ваша последняя версия (скажем, 2.4.3), и вы в конечном итоге установите то, чего, возможно, не планировали. Однако, если частный репозиторий является каноническим, версия 2.999 из packagist.org вообще не будет рассматриваться.

Однако есть несколько случаев, когда вы можете захотеть загружать определённые пакеты только из заданного репозитория, а не все. Или вы можете захотеть, чтобы заданный репозиторий не был каноническим и был бы предпочтительным только в том случае, если он содержит пакеты более новых версий, чем репозитории, определённые ниже.

Поведение по умолчанию

По умолчанию в Composer 2.x все репозитории являются каноническими. Composer 1.x рассматривал все репозитории как неканонические.

Ещё один параметр по умолчанию заключается в том, что репозиторий packagist.org всегда добавляется неявно как последний репозиторий, если вы не отключите его.

Делаем репозитории неканоническими

Вы можете добавить опцию canonical к любому репозиторию, чтобы отключить это поведение по умолчанию и убедиться, что Composer продолжает искать в других репозиториях, даже если этот репозиторий содержит заданный пакет.

{
    "repositories": [
        {
            "type": "composer",
            "url": "https://example.org",
            "canonical": false
        }
    ]
}

Фильтрация пакетов

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

Например, здесь мы хотим выбрать только пакет foo/bar и все пакеты из some-vendor/ из этого репозитория Composer.

{
    "repositories": [
        {
            "type": "composer",
            "url": "https://example.org",
            "only": ["foo/bar", "some-vendor/*"]
        }
    ]
}

А в этом другом примере мы исключаем toy/package из репозитория, который мы, возможно, не хотим загружать в этом проекте.

{
    "repositories": [
        {
            "type": "composer",
            "url": "https://example.org",
            "exclude": ["toy/package"]
        }
    ]
}

И only и exclude должны быть массивами имён пакетов, которые также могут содержать подстановочные знаки (*), которые будут соответствовать любому символу.

© Nils Adermann, Jordi Boggiano
Licensed under the MIT License.
https://getcomposer.org/doc/articles/repository-priorities.md

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API