0 added
0 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#статьи</a></p>
1
<p><a>#статьи</a></p>
2
<ul><li>22 авг 2024</li>
2
<ul><li>22 авг 2024</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><p>Подробный гайд по установке, автозагрузке и основным командам.</p>
4
</ul><p>Подробный гайд по установке, автозагрузке и основным командам.</p>
5
<p>Иллюстрация: Катя Павловская для Skillbox Media</p>
5
<p>Иллюстрация: Катя Павловская для Skillbox Media</p>
6
<p>Пишет об истории IT, разработке и советской кибернетике. Знает Python, JavaScript и немного C++, но предпочитает писать на русском.</p>
6
<p>Пишет об истории IT, разработке и советской кибернетике. Знает Python, JavaScript и немного C++, но предпочитает писать на русском.</p>
7
<p>В проектах на PHP, будь то простые сайты, блоги или крупные системы с сотнями микросервисов, часто используется сторонний код. Например, библиотеки для формирования HTTP-запросов, работы с видео и изображениями, геолокацией и так далее. Это ускоряет разработку приложения и позволяет разработчикам не тратить время на задачи, которые уже решили другие программисты.</p>
7
<p>В проектах на PHP, будь то простые сайты, блоги или крупные системы с сотнями микросервисов, часто используется сторонний код. Например, библиотеки для формирования HTTP-запросов, работы с видео и изображениями, геолокацией и так далее. Это ускоряет разработку приложения и позволяет разработчикам не тратить время на задачи, которые уже решили другие программисты.</p>
8
<p>Несмотря на множество очевидных преимуществ, у такого подхода есть свои проблемы: часто сторонний код тоже использует функции других библиотек, и для безопасной разработки нужно быть уверенным в том, что эти библиотеки установлены на вашем компьютере. В мире PHP с этим (и не только) помогает утилита Composer, о которой и поговорим далее.</p>
8
<p>Несмотря на множество очевидных преимуществ, у такого подхода есть свои проблемы: часто сторонний код тоже использует функции других библиотек, и для безопасной разработки нужно быть уверенным в том, что эти библиотеки установлены на вашем компьютере. В мире PHP с этим (и не только) помогает утилита Composer, о которой и поговорим далее.</p>
9
<p><strong>Содержание</strong></p>
9
<p><strong>Содержание</strong></p>
10
<ul><li><a>Что такое Composer</a></li>
10
<ul><li><a>Что такое Composer</a></li>
11
<li><a>Как установить Composer</a></li>
11
<li><a>Как установить Composer</a></li>
12
<li><a>Синтаксис composer.json</a></li>
12
<li><a>Синтаксис composer.json</a></li>
13
<li><a>Основные команды Composer</a></li>
13
<li><a>Основные команды Composer</a></li>
14
</ul><p><strong>Composer</strong> - это бесплатная программа, которая позволяет легко устанавливать, удалять и обновлять зависимости в проектах на PHP.</p>
14
</ul><p><strong>Composer</strong> - это бесплатная программа, которая позволяет легко устанавливать, удалять и обновлять зависимости в проектах на PHP.</p>
15
<p>Зависимости - это любые внешние компоненты, которые используются в проекте: библиотеки, фреймворки, базы данных, CMS и так далее. Например, если вам нужно внедрить в проект функцию для хеширования паролей, можно не писать её с нуля, а использовать библиотеку - то есть добавить в проект зависимость.</p>
15
<p>Зависимости - это любые внешние компоненты, которые используются в проекте: библиотеки, фреймворки, базы данных, CMS и так далее. Например, если вам нужно внедрить в проект функцию для хеширования паролей, можно не писать её с нуля, а использовать библиотеку - то есть добавить в проект зависимость.</p>
16
<p>Проблема в том, что по мере роста числа зависимостей работать с ними становится всё сложнее. Например, чтобы обновить библиотеку, вам придётся идти на сайт разработчика, скачивать архив и подключать его в проект. А если после обновления изменится сигнатура функций библиотеки или структура пространств имён, то проект и вовсе "рассыпется". Придётся исследовать исходный код и переписывать модули, в которых задействованы проблемные функции.</p>
16
<p>Проблема в том, что по мере роста числа зависимостей работать с ними становится всё сложнее. Например, чтобы обновить библиотеку, вам придётся идти на сайт разработчика, скачивать архив и подключать его в проект. А если после обновления изменится сигнатура функций библиотеки или структура пространств имён, то проект и вовсе "рассыпется". Придётся исследовать исходный код и переписывать модули, в которых задействованы проблемные функции.</p>
17
<p>Поэтому разработчики используют<strong>менеджеры зависимостей</strong>, к коим и относится Composer.</p>
17
<p>Поэтому разработчики используют<strong>менеджеры зависимостей</strong>, к коим и относится Composer.</p>
18
<p>Менеджер зависимостей решает следующие задачи:</p>
18
<p>Менеджер зависимостей решает следующие задачи:</p>
19
<ul><li>Скачивает зависимости из центрального репозитория и других источников (опционально).</li>
19
<ul><li>Скачивает зависимости из центрального репозитория и других источников (опционально).</li>
20
<li>Формирует список зависимостей, необходимых для работы проекта.</li>
20
<li>Формирует список зависимостей, необходимых для работы проекта.</li>
21
<li>Обновляет их.</li>
21
<li>Обновляет их.</li>
22
<li>Фиксирует стабильные версии библиотек и фреймворков, спасая разработчиков от неожиданной поломки проекта после обновления.</li>
22
<li>Фиксирует стабильные версии библиотек и фреймворков, спасая разработчиков от неожиданной поломки проекта после обновления.</li>
23
<li>Упрощает автозагрузку классов.</li>
23
<li>Упрощает автозагрузку классов.</li>
24
</ul><p>Если вы уже работали с другими языками программирования, такими как<a>JavaScript</a>,<a>Python</a>или<a>Ruby</a>, то наверняка пользовались пакетными менеджерами NPM, PIP или RubyGems. Composer выполняет аналогичные функции в экосистеме PHP.</p>
24
</ul><p>Если вы уже работали с другими языками программирования, такими как<a>JavaScript</a>,<a>Python</a>или<a>Ruby</a>, то наверняка пользовались пакетными менеджерами NPM, PIP или RubyGems. Composer выполняет аналогичные функции в экосистеме PHP.</p>
25
<p>Теперь коротко по каждому пункту.</p>
25
<p>Теперь коротко по каждому пункту.</p>
26
<p>Конечно, никто не запрещает скачивать пакеты командой git clone <имя_пакета> из GitHub. Однако этот способ влечёт за собой серьёзные проблемы, о которых мы поговорим чуть ниже.</p>
26
<p>Конечно, никто не запрещает скачивать пакеты командой git clone <имя_пакета> из GitHub. Однако этот способ влечёт за собой серьёзные проблемы, о которых мы поговорим чуть ниже.</p>
27
<p>До Composer для этих целей использовали другой репозиторий и одноимённый менеджер - PEAR (PHP Extension and Application Repository). Но у PEAR был ряд недостатков:</p>
27
<p>До Composer для этих целей использовали другой репозиторий и одноимённый менеджер - PEAR (PHP Extension and Application Repository). Но у PEAR был ряд недостатков:</p>
28
<ul><li>все пакеты устанавливались глобально, то есть нельзя было использовать разные версии для разных проектов;</li>
28
<ul><li>все пакеты устанавливались глобально, то есть нельзя было использовать разные версии для разных проектов;</li>
29
<li>каждый класс должен был решать уникальную задачу, из-за чего было практически невозможно добавлять альтернативные решения;</li>
29
<li>каждый класс должен был решать уникальную задачу, из-за чего было практически невозможно добавлять альтернативные решения;</li>
30
<li>чтобы пакет попал в PEAR, он должен был набрать достаточное количество голосов в сообществе.</li>
30
<li>чтобы пакет попал в PEAR, он должен был набрать достаточное количество голосов в сообществе.</li>
31
</ul><p>К началу 2010-х PEAR перестал удовлетворять потребности PHP-разработчиков и в сообществе встал вопрос о новом менеджере зависимостей.</p>
31
</ul><p>К началу 2010-х PEAR перестал удовлетворять потребности PHP-разработчиков и в сообществе встал вопрос о новом менеджере зависимостей.</p>
32
<p>Появившийся в 2012 году Composer решал обозначенные проблемы. Он устанавливает пакеты на уровне проекта (в папку vendor) и позволяет поставщикам свободно добавлять библиотеки в репозиторий. По умолчанию Composer получает пакеты из центрального хранилища пакетов<a>Packagist</a>, но вы можете указать и другие источники в файле конфигурации.</p>
32
<p>Появившийся в 2012 году Composer решал обозначенные проблемы. Он устанавливает пакеты на уровне проекта (в папку vendor) и позволяет поставщикам свободно добавлять библиотеки в репозиторий. По умолчанию Composer получает пакеты из центрального хранилища пакетов<a>Packagist</a>, но вы можете указать и другие источники в файле конфигурации.</p>
33
<p>Управление зависимостями не сводится к одному лишь скачиванию необходимого кода. Нельзя просто клонировать репозиторий в папку libs и подключить его. Практически у каждого пакета есть свой ряд зависимостей, у которых, в свою очередь, есть свой и так далее. Распутывать этот клубок довольно утомительно.</p>
33
<p>Управление зависимостями не сводится к одному лишь скачиванию необходимого кода. Нельзя просто клонировать репозиторий в папку libs и подключить его. Практически у каждого пакета есть свой ряд зависимостей, у которых, в свою очередь, есть свой и так далее. Распутывать этот клубок довольно утомительно.</p>
34
<em>Кадр: фильм "Властелин колец: Братство Кольца" / New Line Cinema</em><p>Рассмотрим проблему на примере популярной библиотеки<a>Guzzle</a>для отправки HTTP-запросов.</p>
34
<em>Кадр: фильм "Властелин колец: Братство Кольца" / New Line Cinema</em><p>Рассмотрим проблему на примере популярной библиотеки<a>Guzzle</a>для отправки HTTP-запросов.</p>
35
<p>Клонируем репозиторий в папку проекта:</p>
35
<p>Клонируем репозиторий в папку проекта:</p>
36
git clone https://github.com/guzzle/guzzle.git<p>Теперь у нас есть папка guzzle с исходниками и служебными файлами, но пользы от неё пока мало. При попытке инициализировать объект класса Client PHP ругается, что не нашёл некоторые классы:</p>
36
git clone https://github.com/guzzle/guzzle.git<p>Теперь у нас есть папка guzzle с исходниками и служебными файлами, но пользы от неё пока мало. При попытке инициализировать объект класса Client PHP ругается, что не нашёл некоторые классы:</p>
37
require_once "guzzle/src/Client.php"; $newGuzzle = new \GuzzleHttp\Client();<p>Вывод:</p>
37
require_once "guzzle/src/Client.php"; $newGuzzle = new \GuzzleHttp\Client();<p>Вывод:</p>
38
Fatal error: Trait "GuzzleHttp\ClientTrait" not found in D:\xampp\htdocs\project_without_composer\guzzle\src\Client.php on line 17<p>Можно подключить их напрямую командой require или зарегистрировать автозагрузчик, но это поможет отыскать лишь классы, которые шли в пакете guzzle:</p>
38
Fatal error: Trait "GuzzleHttp\ClientTrait" not found in D:\xampp\htdocs\project_without_composer\guzzle\src\Client.php on line 17<p>Можно подключить их напрямую командой require или зарегистрировать автозагрузчик, но это поможет отыскать лишь классы, которые шли в пакете guzzle:</p>
39
function guzzleAutoloader($classname) { $classnameGroup = explode('\\', $classname); $directories = ['', 'Cookie/', 'Exception/', 'Handler/']; foreach ($directories as $directory) { $filename = __DIR__ . "/guzzle/src/{$directory}" . end($classnameGroup) . ".php"; if(file_exists($filename)) { require_once($filename); } } } spl_autoload_register('guzzleAutoloader');<p>Вывод:</p>
39
function guzzleAutoloader($classname) { $classnameGroup = explode('\\', $classname); $directories = ['', 'Cookie/', 'Exception/', 'Handler/']; foreach ($directories as $directory) { $filename = __DIR__ . "/guzzle/src/{$directory}" . end($classnameGroup) . ".php"; if(file_exists($filename)) { require_once($filename); } } } spl_autoload_register('guzzleAutoloader');<p>Вывод:</p>
40
PHP Fatal error: Uncaught Error: Interface "Psr\Http\Client\ClientInterface" not found in D:\xampp\htdocs\project_without_composer\guzzle\src\Client.php:17<p>Psr\Http\Client\ClientInterface и прочие классы придётся устанавливать отдельно. Полный их список можно найти в секции require файла guzzle/composer.json.</p>
40
PHP Fatal error: Uncaught Error: Interface "Psr\Http\Client\ClientInterface" not found in D:\xampp\htdocs\project_without_composer\guzzle\src\Client.php:17<p>Psr\Http\Client\ClientInterface и прочие классы придётся устанавливать отдельно. Полный их список можно найти в секции require файла guzzle/composer.json.</p>
41
<p>Без Composer мы бы вручную устанавливали каждый компонент и писали для них автозагрузчики, пока интерпретатор не перестал бы "ругаться". C Composer достаточно такой команды:</p>
41
<p>Без Composer мы бы вручную устанавливали каждый компонент и писали для них автозагрузчики, пока интерпретатор не перестал бы "ругаться". C Composer достаточно такой команды:</p>
42
composer require <полное_имя_пакета><p>Эта команда пройдётся по дереву зависимостей и сама всё установит.</p>
42
composer require <полное_имя_пакета><p>Эта команда пройдётся по дереву зависимостей и сама всё установит.</p>
43
<p>Почти все современные PHP-проекты на GitHub содержат файл composer.json, в котором хранится список зависимостей вместе с информацией об их версиях. Если файл составлен корректно, то вам даже не нужно знать названия компонентов: достаточно ввести команду composer install, и умница-менеджер сделает всё за вас.</p>
43
<p>Почти все современные PHP-проекты на GitHub содержат файл composer.json, в котором хранится список зависимостей вместе с информацией об их версиях. Если файл составлен корректно, то вам даже не нужно знать названия компонентов: достаточно ввести команду composer install, и умница-менеджер сделает всё за вас.</p>
44
<p>Подробнее о composer.json читайте в разделе "<a>Синтаксис composer.json</a>".</p>
44
<p>Подробнее о composer.json читайте в разделе "<a>Синтаксис composer.json</a>".</p>
45
<p>Неизменный спутник composer.json - его тёзка composer.lock. Из-за схожих названий и синтаксиса их часто путают, но на самом деле оба файла незаменимы и выполняют чётко определённые задачи. Если в composer.json перечислены зависимости и их минимальные версии, то composer.lock содержит информацию о точных версиях зависимостей, которые использовались во время разработки и тестирования.</p>
45
<p>Неизменный спутник composer.json - его тёзка composer.lock. Из-за схожих названий и синтаксиса их часто путают, но на самом деле оба файла незаменимы и выполняют чётко определённые задачи. Если в composer.json перечислены зависимости и их минимальные версии, то composer.lock содержит информацию о точных версиях зависимостей, которые использовались во время разработки и тестирования.</p>
46
<p>Слово lock в расширении появилось не случайно: файл будет блокировать попытки обновить библиотеки до более свежих версий, чем те, что в нём указаны. Таким образом, например, можно гарантировать одинаковые условия для всех разработчиков в проекте.</p>
46
<p>Слово lock в расширении появилось не случайно: файл будет блокировать попытки обновить библиотеки до более свежих версий, чем те, что в нём указаны. Таким образом, например, можно гарантировать одинаковые условия для всех разработчиков в проекте.</p>
47
<p>Composer упрощает подключение файлов благодаря собственному универсальному автозагрузчику. С ним можно почти забыть о директивах include и require - достаточно подключить файл vendor/autoload.php, после чего любой класс, именованный в соответствии с <a>PSR-4</a>, будет подключаться только тогда и в том месте, где это потребуется.</p>
47
<p>Composer упрощает подключение файлов благодаря собственному универсальному автозагрузчику. С ним можно почти забыть о директивах include и require - достаточно подключить файл vendor/autoload.php, после чего любой класс, именованный в соответствии с <a>PSR-4</a>, будет подключаться только тогда и в том месте, где это потребуется.</p>
48
<p>Composer можно установить глобально или локально. В первом случае менеджер будет доступен для работы из любого каталога; при локальной установке - только из папки, которую вы выберете.</p>
48
<p>Composer можно установить глобально или локально. В первом случае менеджер будет доступен для работы из любого каталога; при локальной установке - только из папки, которую вы выберете.</p>
49
<p>Ниже приведены самые доступные и простые способы установки для трёх основных операционных систем: Windows, macOS и Linux.</p>
49
<p>Ниже приведены самые доступные и простые способы установки для трёх основных операционных систем: Windows, macOS и Linux.</p>
50
<p><strong>Важно!</strong></p>
50
<p><strong>Важно!</strong></p>
51
<p>Composer - это набор скриптов на PHP, поэтому перед установкой убедитесь, что на вашем компьютере<a>установлен PHP</a>.</p>
51
<p>Composer - это набор скриптов на PHP, поэтому перед установкой убедитесь, что на вашем компьютере<a>установлен PHP</a>.</p>
52
<p>Самый простой способ - скачать, запустить исполняемый файл Composer-Setup.exe с <a>официального сайта</a>и следовать указаниям установщика. Экзешник сам добавит путь к Composer в переменную PATH, открыв к нему глобальный доступ.</p>
52
<p>Самый простой способ - скачать, запустить исполняемый файл Composer-Setup.exe с <a>официального сайта</a>и следовать указаниям установщика. Экзешник сам добавит путь к Composer в переменную PATH, открыв к нему глобальный доступ.</p>
53
<p>Порядок установки:</p>
53
<p>Порядок установки:</p>
54
<ul><li>Перейдите на<a>официальный сайт Composer</a>и скачайте установщик, нажав на кнопку Composer-Setup.exe. Запустите его.</li>
54
<ul><li>Перейдите на<a>официальный сайт Composer</a>и скачайте установщик, нажав на кнопку Composer-Setup.exe. Запустите его.</li>
55
<li>Следуйте инструкциям установщика. Укажите путь к PHP, если он не обнаруживается автоматически (например, D:\xampp\php\php.exe в XAMPP). Завершите установку, нажав Install.</li>
55
<li>Следуйте инструкциям установщика. Укажите путь к PHP, если он не обнаруживается автоматически (например, D:\xampp\php\php.exe в XAMPP). Завершите установку, нажав Install.</li>
56
<li>Проверьте установку. Откройте командную строку (нажмите<strong>Win</strong>+<strong>R</strong>, введите cmd и нажмите<strong>Enter</strong>). Введите команду composer и убедитесь, что выводится текст, подтверждающий успешную установку:</li>
56
<li>Проверьте установку. Откройте командную строку (нажмите<strong>Win</strong>+<strong>R</strong>, введите cmd и нажмите<strong>Enter</strong>). Введите команду composer и убедитесь, что выводится текст, подтверждающий успешную установку:</li>
57
</ul><em>Скриншот:</em><a><em>Composer</em></a><em>/ Skillbox Media</em><p>Второй способ - ручной, через командную строку (cmd.exe) или PowerShell. С его описанием вы можете ознакомиться в <a>официальной документации</a>.</p>
57
</ul><em>Скриншот:</em><a><em>Composer</em></a><em>/ Skillbox Media</em><p>Второй способ - ручной, через командную строку (cmd.exe) или PowerShell. С его описанием вы можете ознакомиться в <a>официальной документации</a>.</p>
58
<p>1. Откройте терминал и обновите список пакетов:</p>
58
<p>1. Откройте терминал и обновите список пакетов:</p>
59
sudo apt update<p>2. Убедитесь, что на вашей машине установлены расширения, необходимые для корректной работы Composer:</p>
59
sudo apt update<p>2. Убедитесь, что на вашей машине установлены расширения, необходимые для корректной работы Composer:</p>
60
sudo apt install curl php-cli php-mbstring git unzip<p>3. Установите программу с помощью утилиты<strong>install</strong>:</p>
60
sudo apt install curl php-cli php-mbstring git unzip<p>3. Установите программу с помощью утилиты<strong>install</strong>:</p>
61
sudo apt install composer<p>4. Проверьте установку командой composer. В случае успеха терминал вернёт следующий текст:</p>
61
sudo apt install composer<p>4. Проверьте установку командой composer. В случае успеха терминал вернёт следующий текст:</p>
62
<em>Скриншот:<a>Composer</a>/ Skillbox Media</em><p>В macOS самый простой и предпочтительный способ установки - с помощью утилиты Homebrew:</p>
62
<em>Скриншот:<a>Composer</a>/ Skillbox Media</em><p>В macOS самый простой и предпочтительный способ установки - с помощью утилиты Homebrew:</p>
63
<ul><li>Убедитесь, что Homebrew установлен на вашем компьютере. Для этого откройте терминал и введите команду brew -v. Если Homebrew не установлен, сделайте это по<a>инструкции с официального сайта</a>.</li>
63
<ul><li>Убедитесь, что Homebrew установлен на вашем компьютере. Для этого откройте терминал и введите команду brew -v. Если Homebrew не установлен, сделайте это по<a>инструкции с официального сайта</a>.</li>
64
<li>Установите Composer командой brew install composer.</li>
64
<li>Установите Composer командой brew install composer.</li>
65
<li>Проверьте установку: введите в терминале команду composer и убедитесь, что выводится текст, подтверждающий успешную установку.</li>
65
<li>Проверьте установку: введите в терминале команду composer и убедитесь, что выводится текст, подтверждающий успешную установку.</li>
66
</ul><em>Скриншот:<a>Composer</a>/ Skillbox Media</em><p>В composer.json описаны зависимости проекта в формате JSON. Как уже было сказано ранее, он позволяет одной командой установить все необходимые сторонние компоненты.</p>
66
</ul><em>Скриншот:<a>Composer</a>/ Skillbox Media</em><p>В composer.json описаны зависимости проекта в формате JSON. Как уже было сказано ранее, он позволяет одной командой установить все необходимые сторонние компоненты.</p>
67
<p>Файл хранит следующую информацию:</p>
67
<p>Файл хранит следующую информацию:</p>
68
<ul><li>списки зависимостей для продакшена и разработки;</li>
68
<ul><li>списки зависимостей для продакшена и разработки;</li>
69
<li>директории, в которых автозагрузчик будет искать классы;</li>
69
<li>директории, в которых автозагрузчик будет искать классы;</li>
70
<li>справочная информация (имя и тип проекта, описание, ключевые слова, лицензия);</li>
70
<li>справочная информация (имя и тип проекта, описание, ключевые слова, лицензия);</li>
71
<li>конфигурации Composer.</li>
71
<li>конфигурации Composer.</li>
72
</ul><p>Содержимое файла представляет собой простой JSON-объект с ключами и значениями:</p>
72
</ul><p>Содержимое файла представляет собой простой JSON-объект с ключами и значениями:</p>
73
{ "name": "laravel/laravel", "type": "project", "description": "The skeleton application for the Laravel framework.", "keywords": ["laravel", "framework"], "license": "MIT", "require": { "php": "^8.2", "doctrine/dbal": "^4.0", "guzzlehttp/guzzle": "^7.8", "laravel/framework": "^11.9", "laravel/tinker": "^2.9", "spatie/laravel-html": "^3.11" }, "require-dev": { "fakerphp/faker": "^1.23", "laravel/pint": "^1.13", "laravel/sail": "^1.26", "mockery/mockery": "^1.6", "nunomaduro/collision": "^8.0", "phpunit/phpunit": "^11.0.1" }, "autoload": { "psr-4": { "App\\": "app/", "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/" }, "files": [ "app/Helpers/helpers.php" ] } }<p>Ключи в JSON всегда берутся в кавычки, а значениями могут быть как числа, булевы значения, сроки и массивы, так и вложенные объекты. За более подробным описанием JSON приглашаем в <a>нашу статью об этом формате</a>.</p>
73
{ "name": "laravel/laravel", "type": "project", "description": "The skeleton application for the Laravel framework.", "keywords": ["laravel", "framework"], "license": "MIT", "require": { "php": "^8.2", "doctrine/dbal": "^4.0", "guzzlehttp/guzzle": "^7.8", "laravel/framework": "^11.9", "laravel/tinker": "^2.9", "spatie/laravel-html": "^3.11" }, "require-dev": { "fakerphp/faker": "^1.23", "laravel/pint": "^1.13", "laravel/sail": "^1.26", "mockery/mockery": "^1.6", "nunomaduro/collision": "^8.0", "phpunit/phpunit": "^11.0.1" }, "autoload": { "psr-4": { "App\\": "app/", "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/" }, "files": [ "app/Helpers/helpers.php" ] } }<p>Ключи в JSON всегда берутся в кавычки, а значениями могут быть как числа, булевы значения, сроки и массивы, так и вложенные объекты. За более подробным описанием JSON приглашаем в <a>нашу статью об этом формате</a>.</p>
74
<p>Как правило, файл не нужно создавать самостоятельно: он сам появится после первого запуска команды require. Но если вы планируете разместить код в публичном репозитории, например<a>Packagist</a>, то придётся вручную добавить справочную информацию и настройки автозагрузчика.</p>
74
<p>Как правило, файл не нужно создавать самостоятельно: он сам появится после первого запуска команды require. Но если вы планируете разместить код в публичном репозитории, например<a>Packagist</a>, то придётся вручную добавить справочную информацию и настройки автозагрузчика.</p>
75
<p>Теперь познакомимся с некоторыми свойствами.</p>
75
<p>Теперь познакомимся с некоторыми свойствами.</p>
76
<p><strong>name</strong> - имя пакета. Оно состоит из имени вендора и имени пакета, разделёнными прямым слешем /. Именно его пользователи будут вызывать при установке, поэтому для публичных проектов параметр необходим.</p>
76
<p><strong>name</strong> - имя пакета. Оно состоит из имени вендора и имени пакета, разделёнными прямым слешем /. Именно его пользователи будут вызывать при установке, поэтому для публичных проектов параметр необходим.</p>
77
<p><strong>type</strong> - тип пакета, по умолчанию принято ставить library ("библиотека"). Поле используется для определения порядка установки и развёртывания пакета. Например, файлы из library будут скопированы в папку vendor, а пакет metapackage не содержит никаких файлов, зато вызовет установку других пакетов, содержащихся в графе require.</p>
77
<p><strong>type</strong> - тип пакета, по умолчанию принято ставить library ("библиотека"). Поле используется для определения порядка установки и развёртывания пакета. Например, файлы из library будут скопированы в папку vendor, а пакет metapackage не содержит никаких файлов, зато вызовет установку других пакетов, содержащихся в графе require.</p>
78
<p><strong>description</strong>- короткое описание проекта (обязательно для публичных пакетов).</p>
78
<p><strong>description</strong>- короткое описание проекта (обязательно для публичных пакетов).</p>
79
<p><strong>keywords</strong> - массив ключевых слов, по которым можно найти пакет командой composer search.</p>
79
<p><strong>keywords</strong> - массив ключевых слов, по которым можно найти пакет командой composer search.</p>
80
<p><strong>require</strong> - тот самый список зависимостей. В примере выше (это реальный composer.json проекта на Laravel) рядом с каждой версией стоит знак каретки ^, который ограничивает мажорную версию. Это значит, что при работе над проектом лучше ограничиться PHP v8, Laravel v11, PHPUnit v11 и так далее.</p>
80
<p><strong>require</strong> - тот самый список зависимостей. В примере выше (это реальный composer.json проекта на Laravel) рядом с каждой версией стоит знак каретки ^, который ограничивает мажорную версию. Это значит, что при работе над проектом лучше ограничиться PHP v8, Laravel v11, PHPUnit v11 и так далее.</p>
81
<p>Другие символы версионирования в Composer:</p>
81
<p>Другие символы версионирования в Composer:</p>
82
<ul><li><, >, <=, >= и ! = - диапазон версий, например >=1.1.0<=1.1.8;</li>
82
<ul><li><, >, <=, >= и ! = - диапазон версий, например >=1.1.0<=1.1.8;</li>
83
<li>- - диапазон версий через дефис, например 1.1.0-1.18;</li>
83
<li>- - диапазон версий через дефис, например 1.1.0-1.18;</li>
84
<li>* - подстановка, например 1.1.*;</li>
84
<li>* - подстановка, например 1.1.*;</li>
85
<li>~ - последний разряд должен быть равен или больше указанного. Например, ~1.1.3 эквивалентен >=1.1.3<1.2.</li>
85
<li>~ - последний разряд должен быть равен или больше указанного. Например, ~1.1.3 эквивалентен >=1.1.3<1.2.</li>
86
</ul><p><strong>autoload</strong>- список директорий, в которых автозагрузчик будет искать классы.</p>
86
</ul><p><strong>autoload</strong>- список директорий, в которых автозагрузчик будет искать классы.</p>
87
<p>Composer предоставляет четыре метода автозагрузки:</p>
87
<p>Composer предоставляет четыре метода автозагрузки:</p>
88
<ul><li>Файловый - файлы подключаются целиком, по аналогии с require и include. Полезно, когда нужно подключить наборы функций.</li>
88
<ul><li>Файловый - файлы подключаются целиком, по аналогии с require и include. Полезно, когда нужно подключить наборы функций.</li>
89
<li>Карты классов - Composer получает список директорий, составляет список классов, которые в них хранятся, и автоматически загружает их при необходимости.</li>
89
<li>Карты классов - Composer получает список директорий, составляет список классов, которые в них хранятся, и автоматически загружает их при необходимости.</li>
90
<li>PSR-0 - каждому пространству имён в соответствие ставится директория (пара "ключ - значение"), при этом структура папок должна воспроизводить структуру пространства имён. Например, если класс LoginController находится в пространстве App\Http\Controllers, то файл LoginController.php должен лежать в папке App\Http\Controllers.</li>
90
<li>PSR-0 - каждому пространству имён в соответствие ставится директория (пара "ключ - значение"), при этом структура папок должна воспроизводить структуру пространства имён. Например, если класс LoginController находится в пространстве App\Http\Controllers, то файл LoginController.php должен лежать в папке App\Http\Controllers.</li>
91
<li>PSR-4 - то же, что и PSR-0, но структура папок не должна имитировать структуру пространств имён.</li>
91
<li>PSR-4 - то же, что и PSR-0, но структура папок не должна имитировать структуру пространств имён.</li>
92
</ul><p>Для каждого из методов есть своя секция в разделе autoload: files, classmap, psr-0 и psr-4. Чаще всего вы будете работать с psr-4 - современным стандартом автозагрузки в PHP - и чуть реже с files.</p>
92
</ul><p>Для каждого из методов есть своя секция в разделе autoload: files, classmap, psr-0 и psr-4. Чаще всего вы будете работать с psr-4 - современным стандартом автозагрузки в PHP - и чуть реже с files.</p>
93
<p>Теперь, когда вы знакомы с устройством Composer, пришло время узнать его основные команды.</p>
93
<p>Теперь, когда вы знакомы с устройством Composer, пришло время узнать его основные команды.</p>
94
<p>Пожалуй, самая популярная задача, которую разработчики решают с помощью Composer, - установка библиотек и фреймворков. Для этого есть команда require:</p>
94
<p>Пожалуй, самая популярная задача, которую разработчики решают с помощью Composer, - установка библиотек и фреймворков. Для этого есть команда require:</p>
95
composer require <имя_пакета><p>Сразу возникает вопрос:<em>а как узнать точное имя искомого пакета?</em>Кратчайший путь лежит через поисковики: гуглим или яндексим библиотеку, копируем название с официального сайта или из README на GitHub и передаём команде require.</p>
95
composer require <имя_пакета><p>Сразу возникает вопрос:<em>а как узнать точное имя искомого пакета?</em>Кратчайший путь лежит через поисковики: гуглим или яндексим библиотеку, копируем название с официального сайта или из README на GitHub и передаём команде require.</p>
96
Команда для установки пакета Guzzle<em>Скриншот: Guzzle /<a>GitHub</a></em><p>Жмём<strong>Enter</strong> - и вуаля! Composer начинает установку зависимостей, о чём станет понятно по череде сообщений оптимистичного зелёного цвета в терминале. Если установка прошла без проблем, Composer покажет версию установленного пакета.</p>
96
Команда для установки пакета Guzzle<em>Скриншот: Guzzle /<a>GitHub</a></em><p>Жмём<strong>Enter</strong> - и вуаля! Composer начинает установку зависимостей, о чём станет понятно по череде сообщений оптимистичного зелёного цвета в терминале. Если установка прошла без проблем, Composer покажет версию установленного пакета.</p>
97
<p>Обычно в корневой папке PHP-проектов на GitHub лежит файл composer.json со списком необходимых пакетов (о нём мы говорили выше). С помощью этого файла можно установить все зависимости одной командой:</p>
97
<p>Обычно в корневой папке PHP-проектов на GitHub лежит файл composer.json со списком необходимых пакетов (о нём мы говорили выше). С помощью этого файла можно установить все зависимости одной командой:</p>
98
composer install<p>После выполнения команды в корневой директории появится папка vendor с файлами зависимостей и автозагрузчиком autoload.php.</p>
98
composer install<p>После выполнения команды в корневой директории появится папка vendor с файлами зависимостей и автозагрузчиком autoload.php.</p>
99
<p>В 99% случаев установка проходит без сучка и задоринки. Проблемы могут доставить пакеты, которые используют функции отсутствующих расширений. Composer сообщит о них в отчёте:</p>
99
<p>В 99% случаев установка проходит без сучка и задоринки. Проблемы могут доставить пакеты, которые используют функции отсутствующих расширений. Composer сообщит о них в отчёте:</p>
100
league/flysystem-local 3.28.0 requires ext-fileinfo * -> it is missing from your system. Install or enable PHP's fileinfo extension.<p>Обычно проблема решается банальным раскомментированием соответствующей строки в php.ini. Но даже если расширения нет в списке - не страшно: его можно скачать в виде файла в формате .dll (в Windows) или .so (в Linux), скопировать в папку с расширениями (точный путь зависит от операционной системы и версии PHP) и прописать название файла в php.ini.</p>
100
league/flysystem-local 3.28.0 requires ext-fileinfo * -> it is missing from your system. Install or enable PHP's fileinfo extension.<p>Обычно проблема решается банальным раскомментированием соответствующей строки в php.ini. Но даже если расширения нет в списке - не страшно: его можно скачать в виде файла в формате .dll (в Windows) или .so (в Linux), скопировать в папку с расширениями (точный путь зависит от операционной системы и версии PHP) и прописать название файла в php.ini.</p>
101
<p>Обновить все зависимости в проекте можно с помощью команды:</p>
101
<p>Обновить все зависимости в проекте можно с помощью команды:</p>
102
composer update<p>Для обновления конкретной зависимости укажите её имя:</p>
102
composer update<p>Для обновления конкретной зависимости укажите её имя:</p>
103
composer update <vendor-name/project-name><p>У Composer обновления тоже выходят регулярно. Чтобы обновиться до последней версии, используйте следующую команду:</p>
103
composer update <vendor-name/project-name><p>У Composer обновления тоже выходят регулярно. Чтобы обновиться до последней версии, используйте следующую команду:</p>
104
composer self-update<p>Для установки последней стабильной версии добавьте флаг -- stable.</p>
104
composer self-update<p>Для установки последней стабильной версии добавьте флаг -- stable.</p>
105
<p>Команда remove удаляет пакет из проекта:</p>
105
<p>Команда remove удаляет пакет из проекта:</p>
106
composer remove <vendor-name/project-name><p>После выполнения пакет исчезнет из папки vendor и разделов require и require-dev файла composer.json.</p>
106
composer remove <vendor-name/project-name><p>После выполнения пакет исчезнет из папки vendor и разделов require и require-dev файла composer.json.</p>
107
<p>Чтобы composer отработал установку пакетов так, как вы этого ожидаете, файл composer.json должен быть составлен корректно.</p>
107
<p>Чтобы composer отработал установку пакетов так, как вы этого ожидаете, файл composer.json должен быть составлен корректно.</p>
108
<p>Для этого есть команда:</p>
108
<p>Для этого есть команда:</p>
109
composer validate<p>Если файл составлен корректно, вы увидите следующее сообщение:</p>
109
composer validate<p>Если файл составлен корректно, вы увидите следующее сообщение:</p>
110
./composer.json is valid<p>В противном случае Composer укажет на ошибки:</p>
110
./composer.json is valid<p>В противном случае Composer укажет на ошибки:</p>
111
./composer.json is valid for simple usage with Composer but has strict errors that make it unable to be published as a package See https://getcomposer.org/doc/04-schema.md for details on the schema # Publish errors - description : The property description is required<p>В этом примере файл вполне пригоден для использования. Но если мы захотим разместить проект в центральном репозитории<a>Packagist</a>, то он не пройдёт проверку, потому что в composer.json нет поля description.</p>
111
./composer.json is valid for simple usage with Composer but has strict errors that make it unable to be published as a package See https://getcomposer.org/doc/04-schema.md for details on the schema # Publish errors - description : The property description is required<p>В этом примере файл вполне пригоден для использования. Но если мы захотим разместить проект в центральном репозитории<a>Packagist</a>, то он не пройдёт проверку, потому что в composer.json нет поля description.</p>
112
<p>Мы познакомились с основами Composer - незаменимого помощника в установке, обновлении и управлении зависимостями в проектах на языке PHP. Мы узнали, как его установить, что такое composer.json и composer.lock, как правильно "готовить" эти файлы и решить некоторые распространённые проблемы, связанные с развёртыванием приложений на их основе.</p>
112
<p>Мы познакомились с основами Composer - незаменимого помощника в установке, обновлении и управлении зависимостями в проектах на языке PHP. Мы узнали, как его установить, что такое composer.json и composer.lock, как правильно "готовить" эти файлы и решить некоторые распространённые проблемы, связанные с развёртыванием приложений на их основе.</p>
113
<p>Сегодня Composer используется практически везде, поэтому бэкенд-разработчику полезно знать не только основные команды, но и принципы, по которым Composer управляет зависимостями в проектах.</p>
113
<p>Сегодня Composer используется практически везде, поэтому бэкенд-разработчику полезно знать не только основные команды, но и принципы, по которым Composer управляет зависимостями в проектах.</p>
114
<a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
114
<a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>