User:GStefZ/sandbox

From Wikipedia, the free encyclopedia

Composer (софтуер)[edit]

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

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

Composer се използва като съществена част от няколко известни PHP проекти с отворен код, включително и в Laravel.[3]

Въведение[edit]

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

Управление на зависимостите (Dependency management)[edit]

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

Системни изисквания[edit]

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

Основна употреба[edit]

Създаване на проект[edit]

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

Ключът require[edit]

Първото (обикновено и единственото) нещо, което специфицираме в composer.json, е ключът require. По този начин казваме на Composer от кои пакети ни зависи проектът.

{
    "reqire":{
        "monolog/monolog": "1.0.*"
    }
}

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

Имена на пакетите[edit]

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

Стабилност[edit]

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

Инсталиране на зависимости[edit]

За да се инсталират дефинираните зависимости в проекта, е необходимо да се пусне install командата

php composer.phar install

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

Заключващият файл composer.lock[edit]

След инсталиране на зависимостите, 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[edit]

Packagist е основното хранилище в Composer. Хранилището в Composer в общи линии представлява източник на пакети: мястото, от където се взимат пакетите. Целта на Packagist е да бъде централно хранилище, което всеки да ползва. Това означава, че може автоматично да се извиква всеки пакет, които присъства там. В сайта на Packagist (packagist.org) могат да се търсят и разглеждат пакети. Всеки проект с отворен код, който използва Composer, е препоръчително да публикува своите пакети там. Дадена библиотека не е нужно да бъде в Packagist, за да се използва от Composer, но това позволява откриването и възприемането от другите разработчици по-бързо.

Автоматично зареждане[edit]

За библиотеки, които специфицират информация за автоматично зареждане, 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 и файлове.

Бележки[edit]

  1. ^ Software CHANGELOG, github.com, Retrieved November 28, 2013
  2. ^ Виж packagist.org
  3. ^ Maks Surguy (July 27, 2013). "History of Laravel PHP framework, Eloquence emerging". maxoffsky.com. Retrieved May 10, 2015.