18 апр. 2024 г.
Всем привет! Сегодня хотел бы рассказать про инструмент для отслеживания транзитивных зависимостей composer - ComposerRequireChecker.
Понятие транзитивных зависимостей подробно описаны в README пакета.
Прямые зависимости проекта указываются в файле composer.json. У этих пакетов могут также быть свои зависимости - транзитивные, которые устанавливаются автоматически.
Прямые зависимости используются непосредственно в коде проекта. Транзитивные зависимости должны использоваться только в прямых зависимостях. Если транзитивная зависимость используется в коде проекта, то она должна быть добавлена в composer.json, как прямая зависимость.
Реальная проблема может возникнуть при обновлении пакетов с помощью composer update
. Список зависимостей пакетов может поменяться, и транзитивная зависимость может быть удалена из проекта. Если транзитивная зависимость используется напрямую в коде, то такой код перестанет работать.
ComposerRequireChecker решает эту проблему. Он сканирует код проекта и composer.json файл, и находит использование в коде транзитивных зависимостей.
Пакет настраивается с помощью конфигурационного файла composer-require-checker.json
. Пример:
{
"symbol-whitelist": [],
"scan-files" : [
"public/index.php",
"bin/*.php",
"src/*.php"
]
}
Подробнее конфигурация описана в README
Для запуска проверки нужно загрузить ComposerRequireChecker и выполнить команду:
php composer-require-checker.phar check --config-file=composer-require-checker.json composer.json
Для постоянного мониторинга транзитивных зависимостей добавим проверку в CI/CD. Пример для github actions:
- name: Run composer require checker
run: |
wget https://github.com/maglnet/ComposerRequireChecker/releases/download/4.10.0/composer-require-checker.phar
php composer-require-checker.phar check --config-file=$(pwd)/composer-require-checker.json composer.json
Пример работы ComposerRequireChecker можно увидеть в проекте placeholder-service.
При настройке пакета я обнаружил несколько транзитивных зависимостей, использующихся в коде проекта. Добавил их в composer.json. Таким образом, ComposerRequireChecker помогает держать зависимости в порядке.
На этом пока все. Спасибо за внимание!