HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Обычно даже исполняемые пакеты ставятся не глобально, а локально в текущий проект. Composer помещает их в директорию<em>vendor</em>. Если пакет содержит бинарник (то есть может выполняться как программа), то на него создается ссылка в<em>./vendor/bin</em>.</p>
1 <p>Обычно даже исполняемые пакеты ставятся не глобально, а локально в текущий проект. Composer помещает их в директорию<em>vendor</em>. Если пакет содержит бинарник (то есть может выполняться как программа), то на него создается ссылка в<em>./vendor/bin</em>.</p>
2 <p>Попробуйте ответить на вопрос: "Заработает ли запуск phpcs после локальной установки<a>PHP_CodeSniffer</a>, в котором есть исполняемый файл?". Правильный ответ - нет. Путь<em>./vendor/bin</em>не добавлен в $PATH и не должен быть туда добавлен. Локальная установка поэтому и называется локальной: она доступна только внутри проекта. Мы можем запустить бинарник, обратившись к нему непосредственно через<em>./vendor/bin/phpcs</em>, но есть способ получше.</p>
2 <p>Попробуйте ответить на вопрос: "Заработает ли запуск phpcs после локальной установки<a>PHP_CodeSniffer</a>, в котором есть исполняемый файл?". Правильный ответ - нет. Путь<em>./vendor/bin</em>не добавлен в $PATH и не должен быть туда добавлен. Локальная установка поэтому и называется локальной: она доступна только внутри проекта. Мы можем запустить бинарник, обратившись к нему непосредственно через<em>./vendor/bin/phpcs</em>, но есть способ получше.</p>
3 <h2>Скрипты</h2>
3 <h2>Скрипты</h2>
4 <p>Секция<a>scripts</a>внутри файла<em>composer.json</em>позволяет описывать произвольные команды, которые затем можно выполнять. Ее особенность в том, что в контекст выполнения команды Composer добавляет путь<em>/vendor/bin</em>в $PATH только для текущего вызова. А папка vendor/bin - это место, куда Composer складывает бинарники всех локально установленных пакетов.</p>
4 <p>Секция<a>scripts</a>внутри файла<em>composer.json</em>позволяет описывать произвольные команды, которые затем можно выполнять. Ее особенность в том, что в контекст выполнения команды Composer добавляет путь<em>/vendor/bin</em>в $PATH только для текущего вызова. А папка vendor/bin - это место, куда Composer складывает бинарники всех локально установленных пакетов.</p>
5 <p>Рассмотрим пример. Предположим, что мы установили программу phpcs как зависимость:</p>
5 <p>Рассмотрим пример. Предположим, что мы установили программу phpcs как зависимость:</p>
6 <p>В коде выше мы добавили флаг --dev, чтобы Composer автоматически сделал запись об устанавливаемой зависимости в секцию require-dev конфигурационного файла composer.json, потому что эта программа нужна только для локальной разработки.</p>
6 <p>В коде выше мы добавили флаг --dev, чтобы Composer автоматически сделал запись об устанавливаемой зависимости в секцию require-dev конфигурационного файла composer.json, потому что эта программа нужна только для локальной разработки.</p>
7 <p>Следующий шаг - нужно открыть файл<em>composer.json</em>в любом редакторе и создать в секции<em>scripts</em>запись "phpcs": "phpcs". Имя свойства используется как команда в командной строке, значение - то, что реально исполнится. Они не обязательно должны совпадать, но в нашей ситуации это удобно. Теперь попробуем сделать так:</p>
7 <p>Следующий шаг - нужно открыть файл<em>composer.json</em>в любом редакторе и создать в секции<em>scripts</em>запись "phpcs": "phpcs". Имя свойства используется как команда в командной строке, значение - то, что реально исполнится. Они не обязательно должны совпадать, но в нашей ситуации это удобно. Теперь попробуем сделать так:</p>
8 <p>В итоге выполнится проверка кода. Здесь<a>--</a>используется для передачи аргументов команде phpcs.</p>
8 <p>В итоге выполнится проверка кода. Здесь<a>--</a>используется для передачи аргументов команде phpcs.</p>
9 <p>Таким же способом можно добавить на выполнение любую команду. Общий шаблон вызова выглядит так:</p>
9 <p>Таким же способом можно добавить на выполнение любую команду. Общий шаблон вызова выглядит так:</p>
10 <h3>Хуки</h3>
10 <h3>Хуки</h3>
11 <p>Есть целый набор предопределенных свойств в секции scripts, которые Composer запускает автоматически в разные моменты жизненного цикла. Например, он может выполнять некоторые действия до или после установки пакета. Composer определяет для этого следующий список скриптов:</p>
11 <p>Есть целый набор предопределенных свойств в секции scripts, которые Composer запускает автоматически в разные моменты жизненного цикла. Например, он может выполнять некоторые действия до или после установки пакета. Composer определяет для этого следующий список скриптов:</p>
12 <ul><li>pre-package-install</li>
12 <ul><li>pre-package-install</li>
13 <li>post-package-install</li>
13 <li>post-package-install</li>
14 <li>pre-package-update</li>
14 <li>pre-package-update</li>
15 <li>post-package-update</li>
15 <li>post-package-update</li>
16 <li>pre-package-uninstall</li>
16 <li>pre-package-uninstall</li>
17 <li>post-package-uninstall</li>
17 <li>post-package-uninstall</li>
18 </ul><p>Подробнее об этом можно прочитать в<a>официальной документации</a>.</p>
18 </ul><p>Подробнее об этом можно прочитать в<a>официальной документации</a>.</p>