Composer e мениджър на пакети на ниво приложение на езика за програмиране PHP, който предоставя стандартен формат за управление на зависимости (dependencies) в PHP софтуер, както и необходимите библиотеки. Той е създаден от Nils Adermann и Jordi Boggiano, които все още управляват проекта. Те започват разработката през април 2001 г. и първата реализация е на 1 март 2012 г.Software CHANGELOG, github.com, Посетен на 28 ноември 2013.

Composer работи с интерфейс с команден ред и инсталира зависимости (например библиотеки) за дадено приложение. Той също позволява на потребителите да инсталират PHP приложения, които са достъпни в „Packagist“. „Packagist“ е основното хранилище, което съдържа наличните пакети. Composer също предлага възможности за автоматично зареждане на библиотеки, като специфицира информация за автоматично зареждане с цел по-лесна употреба на код от трети страни.

Composer се използва като съществена част от няколко известни PHP проекти с отворен код, включително и в Laravel.Maks Surguy (27 юли 2013). „History of Laravel PHP framework, Eloquence emerging“. maxoffsky.com. Посетен на 10 май 2015.

Въведение Composer е средство за управление на зависимостите в PHP. Той позволява декларирането на библиотеки, нужни на даден проект, както и тяхното управление.

Управление на зависимостите Composer не е мениджър на пакети в смисъла на Yum или Apt. Да, той работи с пакети или библиотеки, но ги управлява на ниво проект, като ги инсталира в директория вътре в самия проект. По подразбиране той не инсталира нищо глобално. И въпреки това е мениджър на зависимостите.

Да предположим, че: Имаме проект, които зависи от определен брой библиотеки. Някои от тези библиотеки зависят от други библиотеки. Composer: Ни позволява да декларираме библиотеките, от които ни зависи проекта. Открива кои версии на кой пакети могат и трябва да бъдат инсталирани, а също и ги инсталира (т.е. зарежда ги в проекта).

Системни изисквания За да може да върви, Composer изисква PHP 5.3.2+. Няколко чувствителни PHP настройки и флагове за компилиране също са необходими.

За да се инсталират пакети от източници различни от обикновени .zip архиви, са необходими git, svn или hg в зависимост от начинът, по който се контролира версията на пакета. Composer е мултиплатформен софтуер

Основна употреба Създаване на проект За създаване на проект всичко, от което имаме нужда е файлът composer.json. Този файл описва зависимостите на проекта ни, а може и да съдържа мета данни.

Ключът require Първото (обикновено и единственото) нещо, което специфицираме в composer.json, е ключът require (изискване). С него казваме на Composer от кои пакети ни зависи проектът. { "require":{ "monolog/monolog": "1.0.*"

По този начин require взима обект, който насочва имената на пакетите към ограниченията откъм версия.

Имена на пакетите Името на даден пакет се състои от името на потребителя и на проекта. Най-често те са еднакви – името на потребителя служи, за да се избегнат конфликти с имената. Това позволява двама различни потребители да създадат библиотека .json, която след това ще бъде наименувана igorw/json и saldeak/json.

Стабилност По подразбиране само надеждните реализации се взимат предвид. За да се променя надеждността на зависимостите могат да се използват флаговете за стабилност (stability flags). За да се смени това за всички пакети, вместо да се прави зависимост по зависимост, може да се използва настройката minimum-stability.

Инсталиране на зависимости За да се инсталират дефинираните зависимости в проекта, е необходимо да се пусне командата install. php composer.phar install Това открива най-новите версии, които отговарят на посоченото ограничение за версия и го зарежда в потребителската директория.

Забелязва се, че командата install създава файл composer.lock

Заключващият файл composer.lock След инсталиране на зависимостите, Composer записва списъка с точните версии, които е инсталирал, във файлът composer.lock. Това заключва проекта само към точно тези версии.

Важно е да се дава composer.lock (заедно с composer.json) към контрола на версиите. По този начин командата install проверява дали заключващият файл е наличен и ако е, тя зарежда версиите специфицирани в нея (независимо от това, което се съдържа в composer.json).

Това означава, че всеки, който стартира проекта ще зареди еднакви версии на зависимостите. По този начин се избягват потенциални грешки при разпространението на приложението. Дори и ако проектът се стартира отново след 6 месеца може да сме сигурни, че зависимостите, които са инсталирани, все още работят, въпреки че са им излезли много нови версии оттогава.

Ако не съществува composer.lock, Composer ще прочете зависимостите и версиите от composer.json и ще създаде заключващия файл след като изпълни командите update и install.

Това означава, че ако зависимостите получат нова версия, ние няма да получим актуализациите автоматично. За да се обнови до новата версия, трябва да се използва командата update. Това ще намери най-новата съвпадаща версия (според файла composer.json) и освен това ще обнови заключващия файл с новата версия. php composer.phar update За да се инсталира и обнови само една зависимост, може да се направи по следния начин: php composer.phar update monolog/monolog [...]

Packagist Packagist е основното хранилище в Composer. Хранилището в Composer в общи линии представлява източник на пакети: мястото, от където се взимат пакетите. Целта на Packagist е да бъде централно хранилище, което всеки да ползва. Това означава, че може автоматично да се извиква всеки пакет, които присъства там.

В сайта на Packagist могат да се търсят и разглеждат пакети.

Всеки проект с отворен код, който използва Composer, е препоръчително да публикува своите пакети там. Дадена библиотека не е нужно да бъде в Packagist, за да се използва от Composer, но това позволява откриването и възприемането от другите разработчици по-бързо.

Автоматично зареждане За библиотеки, които специфицират информация за автоматично зареждане, Composer генерира файлът vendor/autoload.php. Може просто да се включи файлът и ще получим безплатно автоматично зареждане. require __DIR__ . '/vendor/autoload.php'; Това прави използването на код от трети страни изключително лесно. Например: ако проектът ни зависи от Monolog, можем просто да започнем да използваме класове от него и те ще бъдат автоматично заредени. $log = new Monolog\Logger('name'); $log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING)); $log->addWarning('Foo'); Може дори да добавяме собствения си код чрез добавяне на полето autoload към composer.json. { "autoload": { "psr-4": {"Acme\\": "src/"}

В този пример Composer ще регистрира автоматичния зареждач към именното пространство Acme.

Декларираме връзката от именното пространство към директориите. Директорията src ще бъде в главната папка на проекта, на едно ниво с vendor директорията. Пример за име на файла би било src/Foo.php, който съдържа клас Acme/autoload.php.

Включването на този файл ще върне инстанцията на автоматичния зареждач, за да може да се запази върнатата стойност на командата за включване в променлива и да се добавят още именни пространства. Това може да бъде полезно за автоматично зареждане на класове в тестови пакет, например: $loader = require __DIR__ . '/vendor/autoload.php'; $loader->add('Acme\\Test\\', __DIR__); В допълнение към автоматичното зареждане PSR-4, Composer също поддържа автоматично зареждане на PSR-0, classmap и файлове.

Бележки

Външни препратки Официален уебсайт Composer в GitHub Composer документация Composer урок за начинаещи Packagist – главното хранилище на Composer

Категория:Свободен софтуер по език на програмиране Категория:PHP