Как избавиться от лишних неявных зависимостей 🧹



Рассмотрим классический пример про полифилы. Symfony Console версии 5.1 использует функцию is_countable, которая появилась в PHP 7.3. Чтобы поддерживать PHP 7.2, пакет требует полифил symfony/polyfill-php73. Поэтому когда мы устанавливаем symfony/console в проекте с PHP 7.4, мы получаем не только компонент, но и полифил PHP 7.3, который нам, очевидно, не нужен.



Чтобы его удалить, нужно в composer.json в разделе replace прописать "symfony/polyfill-php73": "*" и выполнить update. Аналогично можно убрать полифилы расширений PHP, предварительно гарантировав их наличие через require ext-<name> (см. сниппет).



ComposerRequireChecker (на страже в CI) поможет не увлечься и не удалить лишние пакеты. Он проверит, что все используемые в проекте символы (функции, константы и классы) содержатся в зависимостях, явно прописанных в require.



В сниппете фрагменты composer.json из нашего проекта в Happy Inc.