Установка Composer для “чайников” (настройка и базовые команды)

composer

Что это и зачем оно мне надо?

Если у тебя возник этот вопрос, тогда не читай дальше статью и сперва спроси у google “что такое dependency injection?” и зачем тебе нужен dependency manager (в частности composer).

Лично у меня уже не существует приложений без composer-а. Особенно при разработке под фреймворк. Вот лишь коренные преимущества использования менеджера зависимостей в проектах:

  • Удобная установка и обновление сторонних пакетов и библиотек
  • Правильный деплоймент
  • Чужой код от сторонних пакетов не коммитится в свой репозиторий, и не мусорит код и статистику
  • Гибкое управление версиями зависимостей

Установка

Тут все максимально просто, но сперва надо определиться с методом использования: один composer для всего localhost-а или каждому проекту свой composer? (можно конечно и комбинировать)

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

Держим Composer вместе с приложением

Достаточно скачать файл composer.phar в корневую директорию нашего приложения. Легче будет сделать это командой ниже.

curl -sS https://getcomposer.org/installer | php

Дополнительно сделаем возможным непосредственный запуск самого phar файла. В этом случае мы получим удобный запуск “./composer.phar” вместо “php composer.phar” (имхо это удобнее).

sudo chmod +x composer.phar

Далее либо докачиваем с его помощью скелет для нового приложения от любимого фреймворка, либо собираем собственный composer.json руками. Пример первого есть в статье про установку скелетона Zend Framework 2, а формат json-файла рассмотрим ниже.

Единый Composer для всего localhost (доступен отовсюду)

Опять же качаем composer.phar (но уже не важно куда).

curl -sS https://getcomposer.org/installer | php

Потом переносим его в удобный для нас bin чтобы система автоматически связывала имя файла как альяс для команды, выдаем права на запуск и определяем своего пользователя как владельца.

sudo mv composer.phar /usr/local/bin/composer
sudo chmod +x /usr/local/bin/composer
sudo chown developer:developer /usr/local/bin/composer

Вот и вся магия. Теперь где угодно можно вызвать команду composer. Ура!

Конфигурация Composer

{
    "name": "My Project",
    "description": "Project description",
    "homepage": "http://my-project.com/",
    "require": {
        "php": ">=5.3.3",
        "zendframework/zendframework": "2.*"
    },
    "require-dev": {
        "zendframework/zftool": "v0.1.0",
        "zendframework/zend-developer-tools": "dev-master"
    }
}

Формат composer.json хорошо описан в официальной документации.

Команды Composer

install

Установив composer и собрав свой composer.json можно приступить к установке тех самых пакетов которые мы указали в своем json-файле в блоке “require” и “require-dev”. Для этого мы используем команду install.

composer install
./composer.phar install
php composer.phar install

* Первая команда (строка 1) для тех кто выбрал метод установки единого composer для всей операционной системы. Вторая и третья нужны всем остальным и отличаются лишь тем, дали вы права на запуск phar-файла либо нет.

При первом запуске команды install мы получим последнюю либо точную версию всех пакетов которые мы указали в json-файле (в зависимости от того как мы указали версию для каждого отдельного пакета). Повторный запуск команды install ни к чему не приведет – и это важный момент!

Во время исполнения install, composer скачает все библиотеки в папку vendor нашего проекта (ниже опишу как сменить этот путь), а рядом с json-файлом будет создан новый файл composer.lock (это снепшот – слепок установленных пакетов с указанием их точных версий). Папку vendor стоит сразу же поместить в .gitignore, дабы случайно не смешать все со своим кодом. А вот lock-файл наоборот, нужно закомитить и отправить в репозиторий. Если удалить папку vendor или некоторые пакеты из него а потом опять вызвать команду install, то все пакеты будут восстановлены с точно теми же версиями которые были установлены при первом вызове install. Так происходит, потому что composer проверяет наличие lock-файла, и при его наличии игнорирует версии пакетов указанные в json-файле (только если те не были спущены!), и устанавливает версии указанные в lock-файле.

Таким образом, передавая единый lock-файл между всеми разработчиками, команда будет гарантировано иметь одинаковые версии пакетов (думаю не стоит пояснять зачем).

update

При необходимости же обновить версии пакетов до актуальных – вызываем команду update.

composer update
./composer.phar update
php composer.phar update

После чего все пакеты будут обновлены. Так же будет обновлен и lock-файл.

Тут стоит помнить что обновляться пакеты будут в соответствии с форматом версии указанным для каждого из них отдельно в json-файле. Синтаксис указания версий для пакетов хорошо описан в официальной документации.

self-update

Еще одна полезная команда, которая обновит сам composer.

composer self-update
./composer.phar self-update
php composer.phar self-update

show

./composer.phar show -s -t
./composer.phar show -i -t

Эта команда отображает список установленных пакетов.

Первый пример (с ключом -s) отобразит дерево пакетов которые мы сами руками указали в json-файле.

Второй пример (с ключом -i) отобразит абсолютно все установленные пакеты, рекурсивно включая зависимости всех наших первоначальных пакетов.

Ключ -t меняет отображение ответа в стиль дерева зависимостей.

vendor path или как сменить путь установки библиотек

Для изменения пути установки пакетов, необходимо использовать директиву vendor-dir в json-файле. Вот пример:

{
    "name": "My Project",
    "description": "Project description",
    "homepage": "http://my-project.com/",
    "config": {
        "vendor-dir": "/vendor/custom/path"
    },
    "require": {
        "php": ">=5.3.3",
        "zendframework/zendframework": "2.*"
    },
    "require-dev": {
        "zendframework/zftool": "v0.1.0",
        "zendframework/zend-developer-tools": "dev-master"
    }
}

Заключение

Я постарался описать все основное что может понадобится для знакомства с Composer-ом. Более глубокие фичи лучше изучать по документации. Например: как подключить загрузку собственной библиотеки с github.

А для удобного поиска необходимых пакетов советую пользоваться проектом packagist.org

Если же возникнут вопросы, смело пишите в комментарии.

Leave a Reply