Composer — советы и хитрости

Composer в корне изменил процесс управления пакетами в PHP. Благодаря ему PHP-разработчики со всего мира получили возможность писать и использовать абсолютно независимые от фреймворков библиотеки, части кода, что многократно повысило повторное использование кода и его качество.

Global

Для начала удобно установить composer в глобальную области видимости. В документации четко указано, что composer может (и в большинстве случаев должен) быть установлен глобально. Т.е, для того, что бы его использовать можно было писать не

а просто:

в любом месте вашей системы. Это мега удобно.

Настраивается это очень просто. Если вы работаете в Linux, вы должны переместить composer.phar в папку bin. Вот так:

(возможно потребуется выполнить эту команду от sudo )

 

Правильная установка пакетов

Когда мы читаем какие-то статьи, README-файлы проектов, часто видим инструкции вроде этой:

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

Для того, чтобы добавить в composer.json  новый пакет, лучше воспользоваться командой require .

Эта команда включит в файл все что нужно, без ручного вмешательства в него.

Если нужно добавить пакет в require-dev  секцию, просто используем ключ --dev :

Команда require поддерживает добавление сразу нескольких пакетов. Просто перечислите их через пробел.

 

Блокировка файлов

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

Файл composer.lock как правило находится в системе контроля версий (git или svn например). Таким образом, вы всегда можете “откатиться” до нужного “набора” пакетов нужных версий.

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

 

Версии

Когда вы определяете версии пакетов, которые хотите включить, вы можете использовать различные идентификаторы их версий. Например точное совпадение ( 1.2.3 ), диапазон ( <1.2.3 ), сочетание двух операторов ( >1.2.3 <1.3 ), последняя доступная ( 1.2.* ), а также варианты ~1.2.3  и ^1.2.3 .

Последние два примера нуждаются в пояснении:

1. Тильда ( ~1.2.3 ) загрузит пакет с версией 1.3  – последнюю минорную версию пакета. Согласно семантическому версионированию, первая цифра – мажорная версия, вторая – минорная, третья – разные фиксы, мелочи.

2. Крышечка ( ^1.2.3 ) приведет к последней мажорной версии. Будьте осторожны, так как мажорные версии между собой часто несовместимы.

Если вам не нужна какая-то конкретная версия, я рекомендую вам всегда использовать формат версии ~1.2.3  , так как это наиболее безопасно с точки зрения совместимости.

 

Конфиг и глобальный конфиг

Дефолтные значения не высечены на камне, их можно менять. Например:

этой командой можно попросить composer оптимизировать classmap каждый раз при установке или обновлении пакетов. Это чуть медленнее, чем генерировать дефолтный autoloader и будет тем медленнее, чем больше у вас зависимостей. Но зато сам autoloader будет более оптимальный.

Есть например полезный параметр  cache-files-maxsize – в больших проектах, например как Symfony, может дать ощутимый прирост в скорости работы composer’a.

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

 

Профилирование и вывод подробностей

Добавив флаг –profile к команде, composer не просто выведет строчку с конечным результатом, но и добавит так же информацию по использованным ресурсам. например, сколько операция заняла времени и “съела” памяти.

Есть еще фдаг –verbose который так же выводит доп.информацию, которая помогает понять что именно происходит. Некоторые люди вообще делают composer алиасом для composer --verbose --profile .

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *