Advertisement
  1. Code
  2. PHP

Просте керування пакетами за допомогою Composer

Scroll to top
Read Time: 5 min

Ukrainian (українська мова) translation by Anton Bagaiev (you can also view the original English article)

Давайте нарешті визнаємо: PHP має складну історію управління пакетами, і, як результат, зараз напрочуд важко знайти розробника, що активно використовує такі системи, як PEAR. З іншої сторони, більшість девелоперів обрали їх улюблені фреймворки, код яких написаний для вирішення багатьох речей, таких як інтеграція баз даних, ORM, OAuth, Amaxon S3 та такого іншого.

Зворотньою стороною медалі є те, що зміна фреймворку (або відмова від фреймворку) може стати страшним сном, що потребує вивчати все спочатку для використання інших інструментів — а це нелегка задача. Проте, Composer має це виправити!


Вступ

"Клей між всіма проектами."

Composer був випущений, щоб вирішити ситуацію, назвавши себе "клеєм між усіма проектами" — це означає, що пакети можуть бути написані, розроблені і розповсюджені таким чином, що можуть бути вставлені у інші додатки з легкістю.

А ця стаття була випущена, щоб показати вам, як інсталювати і працювати з пакетами Composer. Прочитавши цю статтю, ви зможете встановити і запустити шмати коду в будь-якому фреймфорку, незалежно від того, чи це CodeIgniterFuelPHPLaravelSymfony2LithiumYiiZend... чи щось іще.


Крок 1 — Інсталяція Composer

Composer складається з двох основних логічних частин — це репозиторій, що зберігає пакунки, та консольний додаток, що допомагає вам знаходити, завантажувати, оновлювати і поширювати код.

Інсталяція додатку на Unix-подібній системі проста:

Це дуже просто! Тепер у вас є файл composer.phar у вашому проекті, що містить всю логіку консольного додатку.

Ви можете переконатись, що все інстальовано, виконавши наступне:

Ця команда виведе список всіх доступних команд.

Особисто я люблю робити цю команду системною:

Цей запит перемістить файл до теки з виконуваних файлів, що дозволить викликати Composer коротшою командою:

Якщо ви використовуєте Windows, ви можете просто завантажити цей файл і виконати його у PHP інтерпретаторі — там, де він може бути встановленим.


Крок 2 — Розуміння composer.json

Якщо ви також розробляєте на Ruby, для вас більш звичним є Gemfile. Або розробники Node також знають package.json. Схожим чином, Composer використовуює composer.json, щоб визначити налаштування і вимоги до пакетів у вашому додатку.

У своїй найпростішій формі, цей файл виглядатиме так:

Тут вимагається пакет "assetic", що створений "kriswallsmith", також вимагається будь-яка версія. Щоб вказати конкретну версію, ви можете використати наступне:

Ви навіть можете поєднати два підходи, наприклад, так:

Це дозволить автоматично вкласти мінорне оновлення, проте не дасть оновитись до 1.1.0, тому що може містити деякі зміни в інтерфейсі, які може не передбачити розробник.


Крок 3 — Вимоги до інсталяції

Тепер, коли ви вказали один чи більше пакетів у вашому composer.json, ви можете запустити наступне:

...або, якщо ви застосували мою фішку для скорочення на юніксових машинах (це було трохи вище):

Ви помітите, що файли завантажились і були поміщені у ному теку vendors/ у корені вашого додатку. Ім'я цієї теки може бути змінене, використовуючи наступний параметр у конфігурації:


Крок 4 — Автоматичне підвантаження

Автоматичне підвантаження у PHP перетворювалось у страшну кашу певний час.

Автоматичне підвантаження у PHP перетворювалось у страшну кашу певний час, тому що кожен розробник мав свій спосіб зберігати речі. Деякі пакети, такі як Smarty, використовують свій підвантажувач, деякі розробники кладуть декілька класів у один файл, або використовують тільки рядкові літери у іменах — варіантів безліч і всі вони непередбачувані.

PSR-0 є стандартом, створеним PHP Standards Group, покликаний вгамувати цей безлад; Composer працює з ним за замовчуванням. Composer працює з відвантажуванням PSR-0, що може бути вкладеним у ваш проект тільки одним рядком:

Очевидно, якщо ви змінили каталог з пакунками, потрібно буде оновити код.

Тепер ви можете застосовувати пакети:

Це приклад з використання Assetic. Так, тут багато простірів імен, проте це зроблено для застереження конфліктів у назвах пакунків. Правила іменування для PSR-0 наступні:

У наступному прикладі використаємо пакунок Buzz HTTP, що виглядає так:

Це може здатись на красивіший file_get_contents(), проте тут міститься багато видів розумної логіки, що працює з відповідями і запитами HTTP — і ви можете побачити, що синтакс просторів імен тут менш значний.


Крок 5 — Реальний світ

Якщо ви хочете діяти більш майстерно, ви можете автоматизувати весь процес.

Наразі, більшість проектів зберігають свої залежності у головному репозиторії; тож, якщо ви, наприклад, використовуєте Facebook SDK, ви просто пхаєте цю версію у ваш код, копіюючи код з гітхабу чи розпаковуючи архів. Потім ви додаєте це до системи управління версіями і створюєте новий коміт.

Версія, що працює з вашим кодом це статичний файл, що, у певний час, ви можете забути або не забути оновити — ЯКЩО ви помітите, що Facebook випустив нову версію. Нова версія файлу знов має бути завантажена і додана у систему управління версіями.

Але тепер ви можете використовувати Composer, щоб запобігти необхідності звертати увагу на версії, або просто запустити оновлення і закомітити всі зміни. Але навіщо тримати код у репозиторії, коли все є там?

Найохайнішим рішенням буде додати теку vendors/ у ваш .gitignore: і звільнити ваш код від цього назавжди. Коли ви розгортаєте код на ваші сервери, просто запустіть composer install або composer update.

А якщо ви хочете діяти дійсно майстерно, ви можете автоматизувати весь процес, тож якщо ваш хостинг знаходиться у хмарі, ви можете налаштувати автоматичний запуск composer install у момент, коли завантажено новий код!


Отже

Незабаром ви побачите рух багатьох фреймворків у сторону Composer, наприклад, FuelPHP буде побудований як пакети Composer, CodeIgniter буде підтримувати автопідвантаження, а Symfony2 вже широко їх використовує.

Composer є чудовим способом додавання пакетів до ваших проектів без інсталяції розширень PECL або закантаження купи файлів. Цей шлях вже надзвичайно застарів і потребує забагато часу розробників.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.