Как правило, даже исполняемые пакеты ставятся не глобально, а локально в текущий проект. Composer помещает их в директорию vendor, а если пакет содержит бинарник (то есть может выполняться как программа), то на него создаётся ссылка в ./vendor/bin. Попробуйте ответить на вопрос: "Заработает ли запуск phpcs после локальной установки PHP_CodeSniffer, содержащего соответствующий исполняемый файл?". Правильный ответ — нет. Путь ./vendor/bin не добавлен в $PATH и более того, не должен быть туда добавлен. Локальная установка на то и локальная, что доступна только внутри проекта. Мы можем запустить бинарник, обратившись к нему непосредственно ./vendor/bin/phpcs. Но есть способ лучше.

Скрипты

Секция scripts внутри файла composer.json, позволяет описывать произвольные команды, которые затем можно выполнять. Её особенностью является то, что Composer в контекст выполнения команды добавляет путь /vendor/bin в $PATH (только для текущего вызова!). А папка vendor/bin это место куда Composer складывает бинарники всех локально установленных пакетов.

Рассмотрим пример. Предположим, что мы установили программу phpcs как зависимость.

$ composer require "squizlabs/php_codesniffer" --dev

Примечание: флаг "--dev" добавлен для того, чтобы Composer автоматически сделал запись об устанавливаемой зависимости в секцию require-dev конфигурационного файла composer.json, так как эта программа нужна только для локальной разработки.

Следующим шагом нужно открыть файл composer.json в любом редакторе и создать в секции scripts такую запись: "phpcs": "phpcs". Имя свойства используется как команда в командной строке, значение — то что реально исполнится. Они не обязательно должны совпадать, но в нашей ситуации это удобно. Теперь, если вы попробуете сделать так:

$ composer run-script phpcs -- --standard=PSR12 .

То выполнится проверка кода. -- используется для передачи аргументов команде phpcs.

Таким же способом можно добавить на выполнение любую команду. Общий шаблон вызова выглядит так:

$ composer run-script <имя скрипта>

Хуки

Есть целый набор предопределённых свойств в секции scripts, которые Composer запускает автоматически в разные моменты жизненного цикла. Например, может понадобиться выполнить некоторые действия до или после установки пакета. Composer определяет для этого следующий список скриптов:

  • pre-package-install
  • post-package-install
  • pre-package-update
  • post-package-update
  • pre-package-uninstall
  • post-package-uninstall

Подробнее об этом можно прочитать в официальной документации.

Самостоятельная работа

  • Попробуйте выполнить скрипт test в пакете php-package

Вы увидите, что запустились и успешно выполнились тесты.

Для продолжения нужно перейти в курс и вступить в него.