Зарегистрируйтесь, чтобы продолжить обучение

Скрипты PHP: Настройка окружения

Обычно даже исполняемые пакеты ставятся не глобально, а локально в текущий проект. 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

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


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

  1. Попробуйте выполнить скрипт test в пакете php-package. Вы увидите, что тесты запустились и успешно выполнились
  2. Установите PHP_CodeSniffer в проект hexlet-php
  3. Создайте в секции scripts запись "phpcs": "phpcs"
  4. Запустите линтер на файлах проекта и исправьте замечания
  5. Добавьте все изменения на GitHub

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 25 000 ₸ в месяц
Разработка веб-приложений на Laravel
10 месяцев
с нуля
Старт 26 декабря

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»