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>