2018-11-19 22:10:56 +03:00
|
|
|
|
---
|
|
|
|
|
category: tool
|
|
|
|
|
tool: composer
|
|
|
|
|
contributors:
|
2018-12-07 02:33:28 +03:00
|
|
|
|
- ["Brett Taylor", "https://github.com/glutnix"]
|
|
|
|
|
translators:
|
|
|
|
|
- ["Aleksey Lysenko", "https://github.com/nasgul"]
|
2018-11-19 22:20:09 +03:00
|
|
|
|
filename: LearnComposer-ru.sh
|
2018-11-19 22:10:56 +03:00
|
|
|
|
lang: ru-ru
|
|
|
|
|
---
|
|
|
|
|
|
2018-12-07 02:33:28 +03:00
|
|
|
|
[Composer](https://getcomposer.org/) — это инструмент управления зависимостями в PHP.
|
2018-11-19 22:16:00 +03:00
|
|
|
|
Он позволяет вам декларировать библиотеки, от которых зависит ваш проект,
|
2018-12-07 02:33:28 +03:00
|
|
|
|
и он будет управлять ими, то есть устанавливать/обновлять их для вас.
|
2018-11-19 22:10:56 +03:00
|
|
|
|
|
|
|
|
|
# Установка
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
# Устанавливаем composer.phar в текущую папку
|
|
|
|
|
curl -sS https://getcomposer.org/installer | php
|
2018-12-07 02:33:28 +03:00
|
|
|
|
# Если вы используете этот подход, вам нужно будет вызвать Composer следующим образом:
|
2018-11-19 22:10:56 +03:00
|
|
|
|
php composer.phar about
|
|
|
|
|
|
2018-12-07 02:33:28 +03:00
|
|
|
|
# Устанавливаем бинарный файл в ~/bin/composer
|
2018-11-19 22:10:56 +03:00
|
|
|
|
# Примечание: убедитесь, что ~/bin находится в переменной PATH вашего окружения
|
|
|
|
|
curl -sS https://getcomposer.org/installer | php -- --install-dir=~/bin --filename=composer
|
|
|
|
|
```
|
|
|
|
|
|
2018-11-19 22:16:00 +03:00
|
|
|
|
Пользователи Windows должны следовать
|
2024-04-21 08:52:07 +03:00
|
|
|
|
[Инструкциям по установке в Windows](https://getcomposer.org/doc/00-intro.md#installation-windows)
|
2018-11-19 22:10:56 +03:00
|
|
|
|
|
|
|
|
|
## Подтверждение установки
|
|
|
|
|
|
|
|
|
|
```sh
|
2024-04-21 08:52:07 +03:00
|
|
|
|
# Проверить версию и перечислить параметры
|
2018-11-19 22:10:56 +03:00
|
|
|
|
composer
|
|
|
|
|
|
|
|
|
|
# Получить дополнительную помощь для параметров
|
|
|
|
|
composer help require
|
|
|
|
|
|
2018-12-07 02:33:28 +03:00
|
|
|
|
# Проверить, способен ли Composer делать то, что ему нужно, и обновлён ли он
|
2018-11-19 22:10:56 +03:00
|
|
|
|
composer diagnose
|
2018-12-07 02:33:28 +03:00
|
|
|
|
composer diag # краткий вариант
|
2018-11-19 22:10:56 +03:00
|
|
|
|
|
2018-12-07 02:33:28 +03:00
|
|
|
|
# Обновление Composer до последней версии
|
2018-11-19 22:10:56 +03:00
|
|
|
|
composer self-update
|
2018-12-07 02:33:28 +03:00
|
|
|
|
composer self # краткий вариант
|
2018-11-19 22:10:56 +03:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
# Использование
|
|
|
|
|
|
2018-12-07 02:33:28 +03:00
|
|
|
|
Composer сохраняет ваши зависимости проекта в `composer.json`.
|
|
|
|
|
Вы можете отредактировать этот файл, но лучше всего позволить Composer управлять им за вас.
|
2018-11-19 22:17:42 +03:00
|
|
|
|
|
2018-11-19 22:10:56 +03:00
|
|
|
|
```sh
|
|
|
|
|
# Создать новый проект в текущей папке
|
|
|
|
|
composer init
|
2018-11-19 22:16:00 +03:00
|
|
|
|
# запускается интерактивная анкета с просьбой предоставить подробную информацию о вашем проекте.
|
2024-04-21 08:52:07 +03:00
|
|
|
|
# Вы прекрасно можете оставить ответы пустыми, если не делаете другие проекты
|
2018-12-07 02:33:28 +03:00
|
|
|
|
# зависимыми от создаваемого проекта.
|
2018-11-19 22:10:56 +03:00
|
|
|
|
|
|
|
|
|
# Если файл composer.json уже существует, загрузите зависимости
|
|
|
|
|
composer install
|
|
|
|
|
|
2024-04-21 08:52:07 +03:00
|
|
|
|
# Чтобы загрузить только зависимости для готового продукта, т.е.
|
2018-12-07 02:33:28 +03:00
|
|
|
|
# исключая зависимости для разработки
|
2018-11-19 22:10:56 +03:00
|
|
|
|
composer install --no-dev
|
|
|
|
|
|
2018-12-07 02:33:28 +03:00
|
|
|
|
# Добавить зависимость для готового продукта к этому проекту
|
2018-11-19 22:10:56 +03:00
|
|
|
|
composer require guzzlehttp/guzzle
|
2018-12-07 02:33:28 +03:00
|
|
|
|
# выяснит, какая существует последняя версия guzzlehttp / guzzle,
|
|
|
|
|
# загрузит её и добавит новую зависимость в поле require файла composer.json.
|
2018-11-19 22:10:56 +03:00
|
|
|
|
|
|
|
|
|
composer require guzzlehttp/guzzle:6.0.*
|
2018-12-07 02:33:28 +03:00
|
|
|
|
# Загрузит последнюю версию, соответствующую шаблону (например, 6.0.2),
|
|
|
|
|
# и добавит зависимость к полю require файла composer.json
|
2018-11-19 22:10:56 +03:00
|
|
|
|
|
|
|
|
|
composer require --dev phpunit/phpunit:~4.5.0
|
2018-12-07 02:33:28 +03:00
|
|
|
|
# Добавит как зависимость для разработки.
|
2018-11-19 22:10:56 +03:00
|
|
|
|
# Будет использовать последнюю версию> = 4.5.0 и <4.6.0
|
|
|
|
|
|
|
|
|
|
composer require-dev phpunit/phpunit:^4.5.0
|
2018-12-07 02:33:28 +03:00
|
|
|
|
# Добавит как зависимость для разработки.
|
|
|
|
|
# Будет использовать последнюю версию> = 4.5.0 и <5.0
|
2018-11-19 22:10:56 +03:00
|
|
|
|
|
2018-11-19 22:16:00 +03:00
|
|
|
|
# Для получения дополнительной информации о совместимости версий Composer см.
|
2018-12-07 02:33:28 +03:00
|
|
|
|
# [Документацию Composer по версиям] (https://getcomposer.org/doc/articles/versions.md)
|
2018-11-19 22:10:56 +03:00
|
|
|
|
|
|
|
|
|
# Чтобы узнать, какие пакеты доступны для установки и в настоящее время установлены
|
|
|
|
|
composer show
|
|
|
|
|
|
|
|
|
|
# Чтобы узнать, какие пакеты в настоящее время установлены
|
|
|
|
|
composer show --installed
|
|
|
|
|
|
2018-12-07 02:33:28 +03:00
|
|
|
|
# Чтобы найти пакет со строкой «mailgun» в названии или описании
|
2018-11-19 22:10:56 +03:00
|
|
|
|
composer search mailgun
|
|
|
|
|
```
|
|
|
|
|
|
2018-11-19 22:16:00 +03:00
|
|
|
|
[Packagist.org](https://packagist.org/) является основным хранилищем для пакетов Composer.
|
2018-12-07 02:33:28 +03:00
|
|
|
|
Существующие сторонние пакеты ищите там.
|
2018-11-19 22:17:42 +03:00
|
|
|
|
|
2024-04-21 08:52:07 +03:00
|
|
|
|
## `composer.json` и `composer.lock`
|
2018-11-19 22:10:56 +03:00
|
|
|
|
|
2018-12-07 02:33:28 +03:00
|
|
|
|
Файл `composer.json` хранит параметры допустимых версий каждой зависимости
|
|
|
|
|
вашего проекта, а также другую информацию.
|
2018-11-19 22:10:56 +03:00
|
|
|
|
|
2018-12-07 02:33:28 +03:00
|
|
|
|
Файл `composer.lock` хранит точную загруженную версию каждой зависимости.
|
2018-11-19 22:10:56 +03:00
|
|
|
|
Никогда не редактируйте этот файл.
|
|
|
|
|
|
2018-12-07 02:33:28 +03:00
|
|
|
|
Если вы включите файл `composer.lock` в свой Git-репозиторий,
|
|
|
|
|
каждый разработчик установит версии зависимостей, которые вы используете.
|
|
|
|
|
Даже когда будет выпущена новая версия зависимости, Composer продолжит загрузку версии,
|
|
|
|
|
записанной в lock-файле.
|
2018-11-19 22:10:56 +03:00
|
|
|
|
|
|
|
|
|
```sh
|
2018-12-07 02:33:28 +03:00
|
|
|
|
# Если вы хотите обновить все зависимости до новейших версий,
|
|
|
|
|
# которые по-прежнему соответствуют вашим предпочтениям для версий
|
2018-11-19 22:10:56 +03:00
|
|
|
|
composer update
|
|
|
|
|
|
2018-12-07 02:33:28 +03:00
|
|
|
|
# Если вам нужна новая версия определённой зависимости:
|
2018-11-19 22:10:56 +03:00
|
|
|
|
composer update phpunit/phpunit
|
|
|
|
|
|
2024-04-21 08:52:07 +03:00
|
|
|
|
# Если вы хотите перенести пакет на более новую версию
|
2018-12-07 02:33:28 +03:00
|
|
|
|
#с изменением предпочитаемой версии,
|
2018-11-19 22:10:56 +03:00
|
|
|
|
# вам может потребоваться сначала удалить старый пакет и его зависимости.
|
|
|
|
|
composer remove --dev phpunit/phpunit
|
|
|
|
|
composer require --dev phpunit/phpunit:^5.0
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Автозагрузчик
|
|
|
|
|
|
2018-12-07 02:33:28 +03:00
|
|
|
|
Composer создаёт класс автозагрузки, который вы можете вызвать
|
|
|
|
|
из своего приложения. Вы можете создавать экземпляры классов через пространство имён.
|
2018-11-19 22:10:56 +03:00
|
|
|
|
|
|
|
|
|
```php
|
|
|
|
|
require __DIR__ . '/vendor/autoload.php';
|
|
|
|
|
|
|
|
|
|
$mailgun = new Mailgun\Mailgun("key");
|
|
|
|
|
```
|
|
|
|
|
|
2018-12-07 02:33:28 +03:00
|
|
|
|
### PSR-4-совместимый автозагрузчик
|
2018-11-19 22:10:56 +03:00
|
|
|
|
|
2018-12-07 02:33:28 +03:00
|
|
|
|
Вы можете добавить в автозагрузчик свои собственные пространства имён.
|
2018-11-19 22:10:56 +03:00
|
|
|
|
|
2018-12-07 02:33:28 +03:00
|
|
|
|
Добавьте поле `autoload` в `composer.json`:
|
2018-11-19 22:10:56 +03:00
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
{
|
|
|
|
|
"autoload": {
|
|
|
|
|
"psr-4": {"Acme\\": "src/"}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
2024-04-06 18:33:50 +03:00
|
|
|
|
|
2018-12-07 02:33:28 +03:00
|
|
|
|
Это скажет автозагрузчику искать что-либо в пространстве имён `\Acme` в папке `src`.
|
2018-11-19 22:10:56 +03:00
|
|
|
|
|
2018-11-19 22:16:00 +03:00
|
|
|
|
Вы также можете использовать
|
2018-12-07 02:33:28 +03:00
|
|
|
|
[PSR-0, карту классов или просто список файлов для включения](https://getcomposer.org/doc/04-schema.md#autoload).
|
|
|
|
|
Также существует поле `autoload-dev` для пространств имён, предназначенных только для разработки.
|
2018-11-19 22:10:56 +03:00
|
|
|
|
|
|
|
|
|
При добавлении или изменении ключа автозагрузки вам необходимо перестроить автозагрузчик:
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
composer dump-autoload
|
2018-12-07 02:33:28 +03:00
|
|
|
|
composer dump # краткий вариант
|
2018-11-19 22:10:56 +03:00
|
|
|
|
|
2018-12-07 02:33:28 +03:00
|
|
|
|
# Оптимизирует пакеты PSR0 и PSR4 для загрузки классов с помощью карты классов.
|
|
|
|
|
# Медленно запускается, но улучшает производительность готового продукта.
|
2018-11-19 22:10:56 +03:00
|
|
|
|
composer dump-autoload --optimize --no-dev
|
|
|
|
|
```
|
|
|
|
|
|
2018-12-07 02:33:28 +03:00
|
|
|
|
# Кэш Composer
|
2018-11-19 22:10:56 +03:00
|
|
|
|
|
|
|
|
|
```sh
|
2018-12-07 02:33:28 +03:00
|
|
|
|
# Composer хранит загруженные пакеты для использования в будущем. Очистите кэш с помощью:
|
2018-11-19 22:10:56 +03:00
|
|
|
|
composer clear-cache
|
|
|
|
|
```
|
|
|
|
|
|
2018-12-07 02:33:28 +03:00
|
|
|
|
# Устранение неполадок
|
2018-11-19 22:10:56 +03:00
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
composer diagnose
|
|
|
|
|
composer self-update
|
|
|
|
|
composer clear-cache
|
|
|
|
|
```
|
|
|
|
|
|
2018-12-07 02:33:28 +03:00
|
|
|
|
## Темы, которые ещё (пока) не включены в этот учебник
|
2018-11-19 22:10:56 +03:00
|
|
|
|
|
2018-12-07 02:33:28 +03:00
|
|
|
|
* Создание и распространение ваших собственных пакетов на Packagist.org или в другом репозитории
|
2018-11-19 22:16:00 +03:00
|
|
|
|
* Предварительные и пост-скриптовые перехватчики: запуск задач,
|
2024-04-21 08:52:07 +03:00
|
|
|
|
когда происходят определенные события Composer
|
2018-11-19 22:10:56 +03:00
|
|
|
|
|
2018-12-07 02:33:28 +03:00
|
|
|
|
### Ссылки
|
2018-11-19 22:10:56 +03:00
|
|
|
|
|
|
|
|
|
* [Composer - Dependency Manager for PHP](https://getcomposer.org/)
|
|
|
|
|
* [Packagist.org](https://packagist.org/)
|