Composer (софтуер)

от Уикипедия, свободната енциклопедия
Направо към навигацията Направо към търсенето
Composer
Logo-composer-transparent.png
Информация
Разработчик Нилс Адерман
Джорди Богиано
Последна версия 1.0.0-alpha10
15 април 2015
Програмен език PHP
Операционна система Междуплатформен софтуер
Език на интерфейса английски
Статус активен
Вид софтуер Мениджър на пакети
Лиценз MIT лиценз
Уебсайт getcomposer.org
Composer в Общомедия

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

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

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

Въведение[редактиране | редактиране на кода]

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 и файлове.

Бележки[редактиране | редактиране на кода]

  1. Software CHANGELOG, github.com, Посетен на 28 ноември 2013
  2. Maks Surguy (27 юли 2013). „History of Laravel PHP framework, Eloquence emerging“. maxoffsky.com. Посетен на 10 май 2015.

Външни препратки[редактиране | редактиране на кода]

Криейтив Комънс - Признание - Споделяне на споделеното Лиценз за свободна документация на ГНУ Тази страница частично или изцяло представлява превод на страницата „Composer (software)“ в Уикипедия на английски. Оригиналният текст, както и този превод, са защитени от Лиценза „Криейтив Комънс - Признание - Споделяне на споделеното“, а за съдържание, създадено преди юни 2009 година — от Лиценза за свободна документация на ГНУ. Прегледайте историята на редакциите на оригиналната страница, както и на преводната страница. Вижте източниците на оригиналната статия, състоянието ѝ при превода и списъка на съавторите.