Composer w akcji. Zarządzanie pakietami.

Hej, hej. Dziś mam dla Was coś bardziej technicznego – porozmawiamy sobie o zarządzaniu pakietami.

Rzecz jasna wpis skierowany jest do początkujących, nie wyobrażam sobie programisty PHP, który nie wie co to jest Composer i do czego służy. No ale zaczynajmy.

Większość projektów (zdaje się nie tylko w PHP) prócz właściwego kodu, zawiera jakieś zależności od zewnętrznych pakietów, bibliotek itp. W końcu po co wymyślać koło na nowo, skoro ktoś oferuje darmowego gotowca, często lepszego niż sami bylibyśmy w stanie napisać. Oszczędzamy przy tym czas i objętość kodu, który musimy napisać. Nie mniej pobieranie każdej paczki ręcznie i wrzucanie do odpowiedniego katalogu, ładowanie klas to nadal mało. Programiści są leniwi, dlatego mamy Composera!

Co takiego da mi Composer?

Wiele rzeczy. Podstawowa, to dołączanie pakietu za pomocą jednej komendy. Composer pobierze, zapisze i co więcej – zadba o automatyczne ładowanie pakietu. Jeśli ktoś zna linux’a i używa np. apt-get install, to działa na podobej zasadzie i poczuje się jak w domu. Jedyne czego potrzebujemy to nazwy paczki, którą chcemy zaciągnąć. Robimy to w ten sposób:

composer require <nazwa_pakietu>

Kolejną rzeczą jest to, że przenosząc nasz projekt, robiąc deploy, pushując do repo czy cokolwiek, nie musimy uwzględniać tutaj katalogu vendor, wystarczy sam plik composer.json. Dlaczego? Bo potem pobierając sobie projekt wystarczy wykonać jedną komednę:

composer install

Komenda ta zainstaluje wszystkie pakiety, które zostały umieszczone w composer.json oraz wykona ewentualnie dodatkowe skrypty.

Wracając jeszcze do instalacji pakietów – mamy możliwość instalowania tylko zależności deweloperskich, czyli takich, które nie są nam potrzebne na produkcji. Może to być na przykład PHPUnit do testów jednostkowych. Przecież na produkcji raczej nie będziemy wykonywać testów. Do tego używamy:

composer require --dev <nazwa_pakietu>

Potem żeby zainstalować pakiety bez zależności deweloperskich wystarczy:

composer install --no-dev

Podobnie sprawa ma się jeśli chodzi o aktualizacje i usuwanie zależności, używamy odpowiednio update i remove.

Composer ponadto oferuje autoloader. Nie dosć, że załaduje klasy, które instalujemy jako zależności, to jeszcze mamy możliwość dodania własnych klas do tego autoloadera. Jest to super rozwiązanie, jeśli nie chcemy pisać swojego systemu ładowania klas. Mamy do wyboru autoładowanie psr-0 i psr-4. Ogólnie do szczęścia potrzebujemy zedytować composer.json:

i wykonać polecenie:

composer dump-autoload

W naszym pliku front controllera (index.php ;)) tylko includujemy plik vendor/autoload.php i jesteśmy w domu.

Czego potrzebuję aby zacząć?

W zasadzie to na koniec wracam do początku. Composera trzeba sobie zainstalować. Pobieramy więc instalator jeśli korzystasz z Windowsa bądź na Linuxie pobieramy to i przenosimy do /usr/bin/composer. Od tego momentu, w obu przypadkach mamy dostęp w konsoli/terminalu do polecenia composer.

Teraz, gdy tworzymy nowy projekt (albo w istniejącym już) wystarczy wykonać polecenie:

composer init

i hulaj dusza. Odpowiadamy na pare pytań i możemy bawić się poleceniami, które przedstawiłem poniżej. Powyższe polecenie utworzy nam podstawowy plik composer.json. Zachęcam do zabawy, a szerszy opis znajdziecie w dokumentacji.

Używacie Composera? Może uważacie go za nieprzydatny? Czekam na komentarze!