Утилиты Composer в ходе выполнения
Хотя Composer в основном используется для установки зависимостей вашего проекта, есть несколько функций, доступных вам во время выполнения.
Если вам нужно использовать какие-либо из них в определённой версии, вы можете потребовать пакет composer-runtime-api.
Автозагрузка
Автозагрузчик — самый используемый инструмент, и он уже описан в нашем руководстве по базовому использованию. Он доступен во всех версиях Composer.
Установленные версии
composer-runtime-api 2.0 представил новый Composer\InstalledVersions класс, который предлагает несколько статических методов для проверки установленных версий. Он автоматически доступен вашему коду, если вы включили автозагрузчик Composer.
Основные варианты использования этого класса следующие:
Проверка наличия пакета X (или виртуального пакета)
\Composer\InstalledVersions::isInstalled('vendor/package'); // returns bool
\Composer\InstalledVersions::isInstalled('psr/log-implementation'); // returns bool Начиная с Composer 2.1, вы также можете проверить, был ли пакет установлен с помощью require-dev, передав false как второй аргумент:
\Composer\InstalledVersions::isInstalled('vendor/package'); // returns true assuming this package is installed
\Composer\InstalledVersions::isInstalled('vendor/package', false); // returns true if vendor/package is in require, false if in require-dev Обратите внимание, что это нельзя использовать для проверки установки пакетов платформы.
Проверка наличия пакета X в версии Y
Примечание: Для использования этого пакета необходимо потребовать
"composer/semver": "^3.0".
use Composer\Semver\VersionParser; \Composer\InstalledVersions::satisfies(new VersionParser, 'vendor/package', '2.0.*'); \Composer\InstalledVersions::satisfies(new VersionParser, 'psr/log-implementation', '^1.0');
Это вернёт true, если, например, vendor/package установлен в версии, соответствующей 2.0.*, а также если имя данного пакета заменено или предоставлено другим пакетом.
Получение версии пакета X
Примечание: Это вернёт
nullесли запрашиваемое имя пакета не установлено само по себе, а лишь предоставлено или заменено другим пакетом. Поэтому рекомендуется использовать satisfies() в библиотечном коде как минимум. В коде приложения у вас немного больше контроля, и это менее важно.
// returns a normalized version (e.g. 1.2.3.0) if vendor/package is installed,
// or null if it is provided/replaced,
// or throws OutOfBoundsException if the package is not installed at all
\Composer\InstalledVersions::getVersion('vendor/package'); // returns the original version (e.g. v1.2.3) if vendor/package is installed,
// or null if it is provided/replaced,
// or throws OutOfBoundsException if the package is not installed at all
\Composer\InstalledVersions::getPrettyVersion('vendor/package'); // returns the package dist or source reference (e.g. a git commit hash) if vendor/package is installed,
// or null if it is provided/replaced,
// or throws OutOfBoundsException if the package is not installed at all
\Composer\InstalledVersions::getReference('vendor/package'); Получение собственной установленной версии пакета
Если вас интересует только собственная версия пакета, например, в коде acme/foo, вы хотите узнать, какая версия acme/foo сейчас запущена, чтобы отобразить её пользователю, то можно использовать getVersion/getPrettyVersion/getReference.
Предупреждение в предыдущем разделе не применимо в этом случае, так как вы уверены, что пакет присутствует и не заменяется, если ваш код выполняется.
Тем не менее, рекомендуется обработать null возвращаемое значение максимально безопасно.
Для более сложных случаев доступны и другие методы, пожалуйста, обратитесь к исходному коду/документации класса.
Получение пути установки пакета
Метод getInstallPath для получения абсолютного пути установки пакета.
Примечание: Путь, хотя и абсолютный, может содержать
../или символические ссылки. Он не гарантирует эквивалентностьrealpath(), поэтому, если это важно, вы должны применить realpath к нему.
// returns an absolute path to the package installation location if vendor/package is installed,
// or null if it is provided/replaced, or the package is a metapackage
// or throws OutOfBoundsException if the package is not installed at all
\Composer\InstalledVersions::getInstallPath('vendor/package'); Доступно начиная с Composer 2.1 (т.е.
composer-runtime-api ^2.1)
Получение установленных пакетов заданного типа
Метод getInstalledPackagesByType принимает тип пакета (например, foo-plugin) и перечисляет установленные пакеты этого типа. Затем вы можете использовать описанные выше методы для получения дополнительной информации о каждом пакете, если это необходимо.
Этот метод должен устранить необходимость в пользовательских установщиках, которые помещают плагины в определённый путь, вместо того, чтобы оставлять их в каталоге vendor. Затем вы можете найти плагины для инициализации во время выполнения через InstalledVersions, включая их пути через getInstallPath, если это нужно.
\Composer\InstalledVersions::getInstalledPackagesByType('foo-plugin'); Доступно начиная с Composer 2.1 (т.е.
composer-runtime-api ^2.1)
Проверка платформы
composer-runtime-api 2.0 представил новый vendor/composer/platform_check.php файл, который включается автоматически при включении автозагрузчика Composer.
Он проверяет, выполнены ли требования платформы (т.е. PHP и расширения PHP) текущим процессом PHP. Если требования не выполнены, скрипт выводит предупреждение с отсутствующими требованиями и завершается с кодом 104.
Чтобы избежать неожиданной белой страницы смерти с неочевидным предупреждением о расширении PHP в производстве, вы можете запустить composer check-platform-reqs в качестве части вашей развертывания/сборки и, если он вернёт код, отличный от 0, вы должны прервать процесс.
Значение по умолчанию — php-only, которое проверяет только версию PHP.
Если по какой-то причине вы не хотите использовать эту проверку безопасности и предпочитаете рисковать ошибками во время выполнения вашего кода, вы можете отключить её, установив конфигурационный параметр platform-check в значение false.
Если вы хотите, чтобы проверка включала проверку наличия расширений PHP, установите конфигурационный параметр в значение true. ext-* требования будут проверены, но по соображениям производительности Composer проверяет только наличие расширения, а не его точную версию.
lib-* требования никогда не поддерживаются/не проверяются функцией проверки платформы.
Путь автозагрузчика в бинарных файлах
composer-runtime-api 2.2 представил новую $_composer_autoload_path глобальную переменную, устанавливаемую при запуске бинарных файлов, установленных с помощью Composer. Подробнее об этом в документации по бинарным файлам vendor.
Это устанавливается прокси-сервером бинарных файлов, поэтому Composer не предоставляет этот параметр проектам, так как это будет бесполезно, так как он будет указывать на самого себя.
Путь бинарного файла (каталога bin) в бинарных файлах
composer-runtime-api 2.2.2 представил новую $_composer_bin_dir глобальную переменную, устанавливаемую при запуске бинарных файлов, установленных с помощью Composer. Подробнее об этом в документации по бинарным файлам vendor.
Это устанавливается прокси-сервером бинарных файлов, поэтому Composer не предоставляет этот параметр проектам, так как это будет бесполезно.
← Настройка | Сообщество →
© Nils Adermann, Jordi Boggiano
Licensed under the MIT License.
https://getcomposer.org/doc/07-runtime.md