Схема composer.json

  1. Схема JSON
  2. Корневой пакет
  3. Свойства
    1. name
    2. description
    3. version
    4. type
    5. keywords
    6. homepage
    7. time
    8. license
    9. authors
    10. support
    11. Ссылки на пакеты
      1. require
      2. require-dev (root-only)
      3. conflict
      4. replace
      5. provide
      6. suggest
    12. autoload
      1. PSR-4
      2. PSR-0
      3. Classmap
      4. Файлы
      5. Исключить файлы из классов
      6. Оптимизация автозагрузчика
    13. autoload-dev (root-only)
    14. include-path
    15. target-dir
    16. minimum-stability (root-only)
    17. prefer-stable (root-only)
    18. repositories (root-only)
    19. config (root-only)
    20. scripts (root-only)
    21. extra
    22. bin
    23. archive
    24. non-feature-branches

В этой главе будут объяснены все поля, доступные в composer.json.

JSON схема #

У нас есть схема JSON, которая документирует формат и может также использоваться для тестирования вашего composer.json. Фактически, он используется командой validate. Вы можете найти его по адресу: https://getcomposer.org/schema.json

Корневой пакет #

Корневой пакет - это пакет, определенный composer.json в корне вашего проекта. Это основной composer.json, который определяет ваши требования к проекту.

Некоторые поля применяются только в контексте корневого пакета. Одним из примеров этого является поле config. Конфигурация может указывать только корневой пакет. Конфигурация зависимостей игнорируется. Это делает config поля root-only.

Заметка. Пакет может быть корневым пакетом или нет, в зависимости от контекста. Например, если ваш проект зависит от библиотеки monolog, ваш проект является корневым. Однако, если вы клонируете monolog из GitHub, чтобы исправить ошибку в нем, тогда monolog является корневым пакетом.

Свойства #

name #

Имя пакета. Он состоит из имени поставщика и названия проекта, разделенных символом /. Примеры:

  • monolog/monolog
  • igorw/event-source

Имя может содержать любой символ, включая пробелы, и его регистр нечувствителен (foo/bar и Foo/Bar считаются одним и тем же пакетом). Для упрощения установки рекомендуется определить краткое и нижнее имя, которое не включает в себя не буквенно-цифровые символы или пробелы.

Требуется для опубликованных пакетов (библиотек).

description #

Краткое описание пакета. Обычно это только одна строка.

Требуется для опубликованных пакетов (библиотек).

version #

Версия пакета. В большинстве случаев это не требуется и должно быть опущено (см. Ниже).

Это должно соответствовать формату X.Y.Z или vX.Y.Z с необязательным суффиксом -dev, -patch (-p), -alpha (-a), -beta (-b) или -RC. Патч, альфа, бета и RC суффиксы также могут сопровождаться числом.

Примеры:

  • 1.0.0
  • 1.0.2
  • 1.1.0
  • 0.2.5
  • 1.0.0-dev
  • 1.0.0-alpha3
  • 1.0.0-beta2
  • 1.0.0-RC5
  • V2.0.4-p1

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

Заметка. Packagist использует хранилище VCS, поэтому приведенное выше заявление очень важно для Packagist. Определение самой версии, скорее всего, в конечном итоге создаст проблемы из-за человеческой ошибки.

type #

Тип упаковки. library по умолчанию.

Типы пакетов используются для настраиваемой логики установки. Если у вас есть пакет, который нуждается в некоторой специальной логике, вы можете определить пользовательский тип. Это может быть набор symfony-bundle, wordpress-plugin или typo3-cms-extension. Эти типы будут привязаны к конкретным проектам, и им нужно будет предоставить установщик, который может устанавливать пакеты этого типа.

В стандартной конфигурации Composer поддерживает четыре типа:

  • library: это значение по умолчанию. Он просто копирует файлы vendor.
  • project: Это означает проект, а не библиотеку. Например, оболочки приложений, такие как стандартная версия Symfony, CMS-установщик SilverStripe или полные приложения, распространяемые как пакеты. Например, это может использоваться средой IDE для предоставления списков проектов для инициализации при создании нового рабочего пространства.
  • metapackage: пустой пакет, содержащий требования и инициирующий установку, но не содержащий файлов и ничего не записывающий в файловую систему. Поэтому вам не нужно устанавливать ключ dist или source для установки.
  • composer-plugin: пакет типа composer-plugin может предоставить установщик для других пакетов, которые имеют конфигурируемый тип. Подробнее читайте в специальной статье.

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

keywords #

Массив ключевых слов, с которым связан пакет. Они могут использоваться для поиска и фильтрации.

Примеры:

  • logging
  • events
  • database
  • redis
  • templating

Необязательный.

homepage #

URL-адрес веб-сайта проекта.

Необязательный.

time #

Дата выпуска версии.

Должно быть в формате ГГГГ-ММ-ДД или ГГГГ-ММ-ДД ЧЧ:ММ:СС.

Необязательный.

license #

Лицензия на пакет. Это может быть строка или массив строк.

Рекомендуемая нотация для наиболее распространенных лицензий (в алфавитном порядке):

  • Apache-2.0
  • BSD-2-Clause
  • BSD-3-Clause
  • BSD-4-Clause
  • GPL-2.0
  • GPL-2.0 +
  • GPL-3.0
  • GPL-3.0 +
  • LGPL-2.1
  • LGPL-2.1 +
  • LGPL-3.0
  • LGPL-3.0 +
  • MIT

Необязательно, но мы настоятельно рекомендуем это сделать. Дополнительные идентификаторы перечислены в реестре лицензий SPDX с открытым исходным кодом.

Для программного обеспечения с закрытым исходным кодом вы можете использовать "proprietary" в качестве идентификатора лицензии.

Пример:

{
 "license": "MIT"
}

Для пакета, когда есть выбор между лицензиями («дизъюнктивная лицензия»), несколько могут быть указаны как массив.

Пример дизъюнктивных лицензий:

{
 "license": [
 "LGPL-2.1",
 "GPL-3.0+"
 ]
}

В качестве альтернативы они могут быть разделены символом «или» и заключены в круглые скобки:

{
 "license": "(LGPL-2.1 or GPL-3.0+)"
}

Аналогичным образом, когда необходимо применить несколько лицензий («конъюнктивная лицензия»), они должны быть отделены «и» и заключены в круглые скобки.

authors #

Авторы пакета. Это массив объектов.

Каждый объект-автор может иметь следующие свойства:

  • name (имя): имя автора. Обычно их настоящее имя.
  • email (эл. почта): адрес электронной почты автора.
  • homepage (домашняя страница): URL-адрес веб-сайта автора.
  • role (роль): роль автора в проекте (например, разработчик или переводчик)

Пример:

{
 "authors": [
 {
 "name": "Nils Adermann",
 "email": "naderman@naderman.de",
 "homepage": "http://www.naderman.de",
 "role": "Developer"
 },
 {
 "name": "Jordi Boggiano",
 "email": "j.boggiano@seld.be",
 "homepage": "http://seld.be",
 "role": "Developer"
 }
 ]
}

Необязательно, но рекомендуется.

support #

Различная информация для получения поддержки по проекту.

Информация о поддержке включает следующее:

  • email: адрес электронной почты для получения поддержки.
  • issues: URL-адрес для отслеживания проблем.
  • forum: URL-адрес форума.
  • wiki: URL-адрес вики.
  • irc: IRC-канал для поддержки, как irc://server/channel.
  • source: URL-адрес для просмотра или загрузки источников.
  • docs: URL-адрес документации.
  • rss: URL-адрес для RSS-канала.

Пример:

{
 "support": {
 "email": "support@example.org",
 "irc": "irc://irc.freenode.org/composer"
 }
}

Необязательный.

Ссылки на пакеты #

Все последующие объекты берут объект, который сопоставляет имена пакетов с версиями пакета через ограничения версии. Подробнее о версиях читайте здесь.

Пример:

{
 "require": {
 "monolog/monolog": "1.0.*"
 }
}

Все ссылки являются необязательными.

require и require-dev дополнительно поддерживают флаги стабильности (только для root). Это позволяет вам дополнительно ограничивать или расширять стабильность пакета, выходящего за пределы настройки минимальной стабильности. Вы можете применить их к ограничению или просто применить их к пустому ограничению, если вы хотите, например, разрешить нестабильные пакеты зависимости.

Пример:

{
 "require": {
 "monolog/monolog": "1.0.*@beta",
 "acme/foo": "@dev"
 }
}

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

Пример:

{
 "require": {
 "doctrine/doctrine-fixtures-bundle": "dev-master",
 "doctrine/data-fixtures": "@dev"
 }
}

require и require-dev дополнительно поддерживают явные ссылки (т. Е. Фиксацию) для версий dev, чтобы убедиться, что они заблокированы для заданного состояния даже при запуске обновления. Они работают только в том случае, если вы явно требуете версию dev и добавляете ссылку с помощью # .

Пример:

{
 "require": {
 "monolog/monolog": "dev-master#2eb0c0978d290a1c45346a1955188929cb4e5db7",
 "acme/foo": "1.0.x-dev#abc123"
 }
}
Примечание. Эта функция имеет серьезные технические ограничения, так как метаданные composer.json будут по-прежнему считываться из имени ветви, указанной вами до хеша. Поэтому вы должны использовать это только в качестве временного решения во время разработки, чтобы устранить проблемы с переходной экономикой до тех пор, пока вы не переключитесь на отмеченные выпуски. Команда Composer не поддерживает эту функцию активно и не принимает сообщения об ошибках, связанные с ней.

Также возможно inline-alias ограничение пакета так, чтобы оно соответствовало ограничению, которое иначе не было бы. Для получения дополнительной информации см. Статью о псевдонимах.

require и require-dev также поддерживают ссылки на конкретные версии PHP и расширения PHP, которые ваш проект должен запускать успешно.

Пример:

{
 "require" : {
 "php" : "^5.5 || ^7.0",
 "ext-mbstring": "*"
 }
}
Примечание. Важно указать список расширений PHP, необходимых вашему проекту. Не все установки PHP созданы равными: некоторые могут пропускать расширения, которые вы можете считать стандартными (например, ext-mysqli, который не устанавливается по умолчанию в минимальных системах установки Fedora/CentOS). Непредставление списка необходимых расширений PHP может привести к плохой пользовательской работе: Composer установит ваш пакет без ошибок, но при этом он не будет работать во время выполнения. Команда composer show --platform содержит список всех расширений PHP, доступных в вашей системе. Вы можете использовать его, чтобы помочь вам составить список используемых вами расширений. В качестве альтернативы вы можете использовать сторонние инструменты для анализа вашего проекта для списка используемых расширений.

require #

Выводит список пакетов, необходимых для этого пакета. Пакет не будет установлен, если эти требования не будут выполнены.

require-dev (только для root) #

Выводит список пакетов, необходимых для разработки этого пакета, или выполнения тестов и т. Д. Требования к установке корневого пакета устанавливаются по умолчанию. Как install, так и update поддерживают параметр --no-dev, который предотвращает установку зависимостей dev.

conflict #

Перечисляет пакеты, конфликтующие с этой версией этого пакета. Они не будут установлены вместе с вашим пакетом.

Обратите внимание, что при определении диапазонов, таких как <1.0 >=1.1 в ссылке conflict, это приведет к конфликту со всеми версиями, которые меньше 1.0 и равны или новее, чем 1.1, в то же время, что, вероятно, не то, что вы хотите. Вы, вероятно, захотите перейти на <1.0 || >=1.1 в этом случае.

replace #

Выводит список пакетов, которые заменяются этим пакетом. Это позволяет разветвить пакет, опубликовать его под другим именем с собственными номерами версий, в то время как пакеты, требующие исходного пакета, продолжают работать с вашим fork, так как он заменяет исходный пакет.

Это также полезно для пакетов, содержащих подпакеты, например, основной пакет symfony / symfony содержит все компоненты Symfony, которые также доступны в виде отдельных пакетов. Если вам нужен основной пакет, он автоматически выполнит любое требование одного из отдельных компонентов, так как он заменит их.

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

provide #

Список других пакетов, предоставляемых этим пакетом. Это в основном полезно для общих интерфейсов. Пакет может зависеть от некоторого виртуального пакета logger, любая библиотека, которая реализует этот интерфейс, просто перечислит его в provide.

suggest #

Предлагаемые пакеты, которые могут улучшать или работать с этим пакетом. Они просто информативны и отображаются после установки пакета, чтобы дать пользователям понять, что они могли бы добавить больше пакетов, даже если они не являются строго обязательными.

Формат подобен ссылкам на пакеты выше, за исключением того, что значения являются свободным текстом, а не ограничениями версии.

Пример:

{
 "suggest": {
 "monolog/monolog": "Allows more advanced logging of the application flow",
 "ext-xml": "Needed to support XML format in class Foo"
 }
}

Примечание переводчика.

"Allows more advanced logging of the application flow" - «Позволяет более продвинутую регистрацию потока приложения»

"Needed to support XML format in class Foo" - «Необходимо для поддержки формата XML в классе Foo»

autoload #

Автозагрузка для автозагрузчика PHP.

Поддерживаются автозагрузка PSR-4 и PSR-0, генерация classmap и files.

PSR-4 - рекомендуемый способ, поскольку он обеспечивает большую простоту использования (нет необходимости регенерировать автозагрузчик при добавлении классов).

PSR-4 #

Под ключ psr-4 вы определяете сопоставление пространств имен с путями, относительно корня пакета. При автоматической загрузке класса Foo\\Bar\\Baz префикс пространства имен Foo\\, указывающий на каталог src/, означает, что автозагрузчик будет искать файл с именем src/Bar/Baz.php и включать его, если он присутствует. Обратите внимание, что в отличие от более старого стиля PSR-0, префикс (Foo\\) отсутствует в пути к файлу.

Префиксы пространства имен должны заканчиваться на \\, чтобы избежать конфликтов между подобными префиксами. Например, Foo будет сопоставлять классы в пространстве имен FooBar, так что обратная косая черта решает проблему: Foo\\ и FooBar\\ различны.

Ссылки PSR-4 объединяются во время установки / обновления в один массив key => value, который можно найти в созданном файле vendor/composer/autoload_psr4.php.

Пример:

{
 "autoload": {
 "psr-4": {
 "Monolog\\": "src/",
 "Vendor\\Namespace\\": ""
 }
 }
}

Если вам нужно найти один и тот же префикс в нескольких каталогах, вы можете указать их в виде массива как такового:

{
 "autoload": {
 "psr-4": { "Monolog\\": ["src/", "lib/"] }
 }
}

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

{
 "autoload": {
 "psr-4": { "": "src/" }
 }
}

PSR-0 #

Под клавишей psr-0 вы определяете сопоставление пространств имен с путями по отношению к корню пакета. Обратите внимание, что это также поддерживает соглашение о нераспространении в стиле PEAR.

Обратите внимание: декларации пространств имен должны заканчиваться на \\, чтобы убедиться, что автозагрузчик отвечает точно. Например, Foo будет соответствовать в FooBar, так что обратная косая черта решает проблему: Foo\\ и FooBar\\ различны.

Ссылки PSR-0 объединяются во время установки / обновления в один массив key => value, который можно найти в созданном файле vendor/composer/autoload_namespaces.php.

Пример:

{
 "autoload": {
 "psr-0": {
 "Monolog\\": "src/",
 "Vendor\\Namespace\\": "src/",
 "Vendor_Namespace_": "src/"
 }
 }
}

Если вам нужно найти один и тот же префикс в нескольких каталогах, вы можете указать их в виде массива как такового:

{
 "autoload": {
 "psr-0": { "Monolog\\": ["src/", "lib/"] }
 }
}

Стиль PSR-0 не ограничивается декларациями пространств имен, но может быть указан вплоть до уровня класса. Это может быть полезно для библиотек с одним классом в глобальном пространстве имен. Если исходный файл php также расположен в корневом каталоге пакета, например, он может быть объявлен следующим образом:

{
 "autoload": {
 "psr-0": { "UniqueGlobalClass": "" }
 }
}

Если вы хотите иметь резервный каталог, в котором может находиться любое пространство имен, вы можете использовать пустой префикс, например:

{
 "autoload": {
 "psr-0": { "": "src/" }
 }
}

Classmap #

Все ссылки classmap объединяются во время установки / обновления в один массив key => value, который можно найти в созданном файле vendor/composer/autoload_classmap.php. Эта карта создается путем сканирования классов во всех файлах .php и .inc в указанных каталогах / файлах.

Вы можете использовать поддержку поколения classmap, чтобы определить автозагрузку для всех библиотек, которые не следуют PSR-0/4. Чтобы настроить это, вы указываете все каталоги или файлы для поиска классов.

Пример:

{
 "autoload": {
 "classmap": ["src/", "lib/", "Something.php"]
 }
}

Файлы #

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

Пример:

{
 "autoload": {
 "files": ["src/MyLibrary/functions.php"]
 }
}

Исключить файлы из classmaps #

Если вы хотите исключить некоторые файлы или папки из карты классов, вы можете использовать свойство «exclude-from-classmap». Это может быть полезно, например, чтобы исключить тестовые классы в вашей рабочей среде, поскольку они будут пропущены с карты классов даже при создании оптимизированного автозагрузчика.

Генератор classmap игнорирует все файлы в указанных здесь путях. Пути абсолютны из корневого каталога пакета (то есть местоположения composer.json) и поддерживают *, чтобы соответствовать чему угодно, кроме косой черты, и **, чтобы соответствовать чему-либо. ** неявно добавляется в конец пути.

Пример:

{
 "autoload": {
 "exclude-from-classmap": ["/Tests/", "/test/", "/tests/"]
 }
}

Оптимизация автозагрузчика #

Автозагрузчик может оказать существенное влияние на время запроса (50-100 мс на запрос в больших рамках с использованием большого количества классов). Подробнее об оптимизации этого автозагрузчика см. Статью об оптимизации автозагрузчика.

autoload-dev (только для root) #

Этот раздел позволяет определить правила автозагрузки для целей разработки.

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

Поэтому рекомендуется использовать выделенный путь для ваших модульных тестов и добавлять его в раздел autoload-dev.

Пример:

{
 "autoload": {
 "psr-4": { "MyLibrary\\": "src/" }
 },
 "autoload-dev": {
 "psr-4": { "MyLibrary\\Tests\\": "tests/" }
 }
}

include-path #

УСТАРЕЛО: Это присутствует только для поддержки устаревших проектов, и весь новый код должен предпочтительно использовать автозагрузку. Как таковая это устаревшая практика, но сама функция вряд ли исчезнет из Composer.

Список путей, которые должны быть добавлены к include_path PHP.

Пример:

{
 "include-path": ["lib/"]
}

Необязательный.

target-dir #

УСТАРЕЛО: это присутствует только для поддержки автозагрузки старого стиля PSR-0, и весь новый код должен предпочтительно использовать PSR-4 без target-dir, а проекты с использованием PSR-0 с пространствами имен PHP рекомендуется переносить на PSR-4.

Определяет цель установки.

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

Примером может служить Symfony. Для компонентов имеются отдельные пакеты. Компонент Yaml находится в разделе Symfony\Component\Yaml. Корень пакета - это каталог Yaml. Чтобы сделать автозагрузку возможной, мы должны убедиться, что она не установлена ​​в vendor/symfony/yaml, а вместо этого в vendor/symfony/yaml/Symfony/Component/Yaml, чтобы автозагрузчик мог загрузить ее из vendor/symfony/yaml.

Чтобы сделать это, autoload и target-dir определены следующим образом:

{
 "autoload": {
 "psr-0": { "Symfony\\Component\\Yaml\\": "" }
 },
 "target-dir": "Symfony/Component/Yaml"
}

Необязательный.

minimum-stability (только для root) #

Это определяет поведение по умолчанию для фильтрации пакетов по стабильности. По умолчанию это stable, поэтому, если вы полагаетесь на пакет dev, вы должны указать его в своем файле, чтобы избежать сюрпризов.

Все версии каждого пакета проверены на стабильность, а те, которые менее стабильны, чем параметр minimum-stability, будут игнорироваться при разрешении ваших зависимостей проекта. (Обратите внимание, что вы также можете указать требования к стабильности для каждого пакета, используя флаги стабильности в ограничениях версии, которые вы указываете в блоке require (более подробно см. Ссылки на пакеты).

Доступные опции (в порядке стабильности): dev, alpha, beta, RC и stable.

prefer-stable (только для root) #

Когда это включено, Composer предпочтет более устойчивые пакеты над неустойчивыми, когда возможно найти совместимые стабильные пакеты. Если вам нужна версия dev или только альфа-версии для пакета, они все равно будут выбраны с учетом минимальной стабильности.

Используйте "prefer-stable": true для включения.

repositories (только для root) #

Пользовательские репозитории пакетов.

По умолчанию Composer просто использует репозиторий packagist. Указав репозитории, вы можете получить пакеты из других мест.

Репозитории рекурсивно не реплицируются. Вы можете добавить их только в ваш основной composer.json. Объявления-деклараторы зависимостей composer.json игнорируются.

Поддерживаются следующие типы репозитория:

  • composer: Репозиторий Composer - это просто файл packages.json, передаваемый по сети (HTTP, FTP, SSH), содержащий список объектов composer.json с дополнительной информацией о dist и / или source. Файл packages.json загружается с использованием потока PHP. Вы можете установить дополнительные параметры в этом потоке, используя параметр options.
  • vcs: Репозиторий системы управления версиями может извлекать пакеты из репозиториев git, svn, fossil и hg.
  • pear: При этом вы можете импортировать любой грушевый репозиторий в свой проект Composer.
  • package: Если вы зависите от проекта, который не имеет никакой поддержки для композитора, вы можете определить пакет inline, используя репозиторий package. Вы просто встраиваете объект composer.json.

Для получения дополнительной информации по любому из них см. Репозитории.

Пример:

{
 "repositories": [
 {
 "type": "composer",
 "url": "http://packages.example.com"
 },
 {
 "type": "composer",
 "url": "https://packages.example.com",
 "options": {
 "ssl": {
 "verify_peer": "true"
 }
 }
 },
 {
 "type": "vcs",
 "url": "https://github.com/Seldaek/monolog"
 },
 {
 "type": "pear",
 "url": "https://pear2.php.net"
 },
 {
 "type": "package",
 "package": {
 "name": "smarty/smarty",
 "version": "3.1.7",
 "dist": {
 "url": "http://www.smarty.net/files/Smarty-3.1.7.zip",
 "type": "zip"
 },
 "source": {
 "url": "https://smarty-php.googlecode.com/svn/",
 "type": "svn",
 "reference": "tags/Smarty_3_1_7/distribution/"
 }
 }
 }
 ]
}
Примечание. Порядок значим здесь. При поиске пакета Composer будет искать от первого до последнего репозитория и выбирать первое совпадение. По умолчанию Packagist добавляется последним, что означает, что пользовательские репозитории могут переопределять пакеты от него.

Также возможно использование нотации объектов JSON. Однако пары ключ / значение JSON должны Считается неупорядоченным, так что последовательное поведение не может быть гарантировано.

{
 "repositories": {
 "foo": {
 "type": "composer",
 "url": "http://packages.foo.com"
 }
 }
}

config (только для root) #

Набор параметров конфигурации. Он используется только для проектов. Описание каждого индивидуального варианта см. в статье "Конфигурация".

scripts (только для root) #

composer позволяет вам подключаться к различным частям процесса установки с помощью сценариев.

Смотрите "Скрипты" для подробностей событий и примеров.

extra #

Произвольные дополнительные данные для потребления scripts.

Это может быть практически что угодно. Чтобы получить доступ к нему из обработчика событий скрипта, вы можете сделать следующее:

$extra = $event->getComposer()->getPackage()->getExtra();

Необязательный.

bin #

Набор файлов, которые следует рассматривать как двоичные файлы и символические ссылки в bin-dir (из config).

Дополнительные сведения см. в статье "Двоичные файлы поставщика и каталог vendor/bin".

Необязательный.

archive #

Набор параметров для создания архивов пакетов.

Поддерживаются следующие параметры:

  • exclude: Позволяет настраивать список шаблонов для исключенных путей. Синтаксис шаблона соответствует файлам .gitignore. Ведущий восклицательный знак (!) Приведет к включению любых файлов соответствия, даже если предыдущий шаблон исключил их. Ведущая косая черта будет совпадать только в начале относительного пути проекта. Звездочка не будет расширяться до разделителя каталогов.

Пример:

{
 "archive": {
 "exclude": ["/foo/bar", "baz", "/*.test", "!/foo/bar/baz"]
 }
}

Пример будет включать /dir/foo/bar/file, /foo/bar/baz, /file.php, /foo/my.test, но он исключит /foo/bar/any, /foo/baz и /my.test.

Необязательный.

non-feature-branches #

Список шаблонов регулярных выражений имен ветвей, которые не являются числовыми (например, «последние» или что-то еще), которые НЕ будут обрабатываться как ветви признака. Это массив строк.

Если у вас есть нечисловые имена ветвей, например «последняя», «текущая», «самая стабильная» или что-то в этом роде, это не похоже на номер версии, тогда Composer обрабатывает такие ветви как ветви функций. Это означает, что он ищет родительские ветви, которые выглядят как версии или заканчиваются в специальных ветвях (таких как master), а номер версии корневого пакета становится версией родительской ветви или по крайней мере мастером или чем-то еще.

Чтобы обрабатывать нечисловые именованные ветви в качестве версий вместо поиска родительской ветви с допустимой версией или специальным именем ветви, например, главной, вы можете установить шаблоны для имен ветвей, которые должны обрабатываться как ветви версии для версии.

Это действительно полезно, когда у вас есть зависимости, используя «self.version», так что не dev-master, но такая же ветка установлена ​​(в примере: последнее тестирование).

Пример:

Если у вас есть ветка тестирования, которая сильно поддерживается на этапе тестирования и развертывается в вашей промежуточной среде, обычно «composer show -s» предоставляет вам versions : * dev-master.

Если вы настроите latest-.* Как шаблон для non-feature-branches, например:

{
 "non-feature-branches": ["latest-.*"]
}

Затем «composer show -s» предоставит вам versions : * dev-latest-testing.

Необязательный.

← Интерфейс командной строки Репозитории →