Обычно даже исполняемые пакеты ставятся не глобально, а локально в текущий проект. 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. Вы увидите, что тесты запустились и успешно выполнились - Установите PHP_CodeSniffer в проект hexlet-php
- Создайте в секции scripts запись
"phpcs": "phpcs"
- Запустите линтер на файлах проекта и исправьте замечания
- Добавьте все изменения на GitHub
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Вебинар «Как самостоятельно учиться»
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.