Projekt obiektowy - internetowy notes > Lekcja 1
Composer
Ostatnia modyfikacja: 01.06.2021
TODO added_date na 01.06.
Rozpoczniemy od przygotowania Composera. Dzięki niemu możemy łatwo używać w naszym projekcie zewnętrznych bibliotek napisanych przez inne osoby (znajdziesz je wszystkie na stronie <a href="https://packagist.org/" class="content__link" target="_blank">packagist.org</a>), ale także skorzystać z automatycznego ładowania klas.
<h3 class="content__header-small" id="no-i"><a href="#no-i" class="content__header-link">No i?</a></h3>To tyle - tak mało, a jednocześnie tak dużo. W obecnej chwili Composer jest właściwie standardem - nie wyobrażam sobie, aby programista PHP mógł go nie znać. Przedstawię teraz przykład wybiegający nieco do przodu, ale bardziej praktyczny, abyś mógł zrozumieć co Ci to tak naprawdę da.
Większość projektów tworzonych jest przy użyciu <a href="https://pl.wikipedia.org/wiki/System_kontroli_wersji" target="_blank" class="content__link">systemów kontroli wersji</a>, na przykład <a href="https://pl.wikipedia.org/wiki/Git_(oprogramowanie)" class="content__link" target="_blank">Gita</a>. W takim repozytorium przechowywany jest cały kod projektu (bez zewnętrznych bibliotek) oraz tylko plik konfiguracyjny dla Composera. W celu pobrania wszystkich potrzebnych bibliotek i ich zależności wydajemy jedno polecenie i już! Mamy wszystko czego potrzebujemy. Poza tym zmieniają się przecież wersje poszczególnych bibliotek, poszczególne pakiety mają swoje wymagania i wymagają innych... Zapanowanie nad tym byłoby po prostu bardzo ciężkie, a przechowywanie zawsze wszystkich plików potrzebnych bibliotek - kłopotliwe. Stąd właśnie Composer, który znacznie to wszystko ułatwia.
<h3 class="content__header-small" id="instalacja"><a href="#instalacja" class="content__header-link">Instalacja</a></h3>Najlepiej będzie, jeśli zainstalujemy Composer tak, aby był dostępny globalnie. Dzięki temu będziemy mogli użyć go w każdym projekcie. Aby to zrobić wystarczy umieścić plik wykonywalny w jednej z lokalizacji dostępnej w zmiennej środowiskowej <span class="small-code">PATH</span> lub ewentualnie dodać tam swoją lokalizację.
Najprostszy jak dla mnie sposób to pobranie jego ostatniej wersji, na przykład przy użyciu programu <span class="small-code">wget</span>. Ostatnia wydana wersja znajduje się zawsze pod adresem: <span class="small-code">https://getcomposer.org/composer.phar</span>. Możemy zrobić to tak:
<figure class="content__gallery content__gallery--center"><img src="/images/projekt-obiektowy-internetowy-notes/1-download-composer.png" alt="wget https://getcomposer.org/composer.phar -O /usr/local/bin/composer && chmod +x /usr/local/bin/composer" class="content__image"></figure>wget nieznane polecenie / wget not found
Jeśli przy próbie użycia <span class="small-code">wget</span> dostaniesz informację, że system nie znalazł takiego polecenia to znaczy, że po prostu nie masz zainstalowanego tego programu. Aby to zrobić wystarczy wydać proste polecenie <span class="small-code">apt install wget</span>. Możesz też skorzystać z innego programu lub pobrać i przenieść ten plik w trybie graficznym. W kursie jednak unikam takich metod - im więcej nauczysz się teraz pracy w konsoli, tym lepiej dla Ciebie.
<span class="small-code">wget</span> pobiera plik, a dzięki dodaniu parametru <span class="small-code">-O</span> od razu przenosi go pod wskazaną lokalizację i ustawia podaną nazwę (pozbywamy się rozszerzenia <i>.phar</i>, aby nie trzeba było podawać go przy każdym wywołaniu). Jest to jedna ze ścieżek dostępna we wspomnianej wcześniej zmiennej <span class="small-code">PATH</span>, a więc Composer będzie dostępny globalnie. Na koniec nadajemy uprawnienia wykonania dla tego pliku. I gotowe!
<figure class="content__gallery content__gallery--center"><img src="/images/projekt-obiektowy-internetowy-notes/1-composer.png" alt="Efekt działania polecenia composer w konsoli" class="content__image"></figure>Composer nam więc działa, widzisz też od razu listę dostępnych komend.
Jeśli chodzi o inne sposoby instalacji to można też zrobić to poprzez <a href="https://getcomposer.org/download/" target="_blank" class="content__link">oficjalny skrypt instalacyjny</a>, który weryfikuje wymagania, jednak osobiście nie miałem nigdy problemu z przedstawioną powyżej instalacją, a wydaje mi się po prostu szybsza. A jeśli korzystasz z Windowsa, to na stronie Composera dostępny jest <a href="https://getcomposer.org/doc/00-intro.md#installation-windows" target="_blank" class="content__link">instalator w formacie <i>exe</i></a>.
<h3 class="content__header-small" id="krotkie-wprowadzenie"><a href="#krotkie-wprowadzenie" class="content__header-link">Krótkie wprowadzenie</a></h3> Najbardziej podstawowym poleceniem jest <span class="small-code">require</span>. Umożliwia ono **pobranie pakietu** wraz ze wszystkimi potrzebnymi zależnościami. Zainstalujmy <a href="https://twig.symfony.com/" class="content__link" target="_blank">Twiga</a>, który przyda nam się później jako system szablonów. Wydajemy polecenie: <span class="small-code">composer require twig/twig:^2.0</span>. <figure class="content__gallery content__gallery--center"><img src="/images/projekt-obiektowy-internetowy-notes/1-composer-require-twig.png" alt="Instalacja Twiga przez Composer: composer require twig/twig:^2.0" class="content__image"></figure>Po jego wykonaniu w katalogu projektu stworzony zostanie folder vendor zawierający wszystkie zależności. Możesz z ciekawości przejrzeć co zawiera, jednak zasadniczo nie ma potrzeby, abyś się tym w tej chwili interesował. Pojawią się też dwa pliki tekstowe: <i>composer.json</i> i <i>composer.lock</i>. Ten pierwszy pozostanie w obrębie naszych zainteresowań, drugi nie jest zmieniany ręcznie w zasadzie nigdy - jest to plik generowany przez Composera zawierający potrzebne mu informacje.
Mój <i>composer.json</i> wygląda następująco:
<pre class="code-box"> { "require": { "twig/twig": "^2.0" } } </pre>Wracając do samego polecenia: <span class="small-code">require</span> oznacza pakiet jako zawsze wymagany (bo jest też <span class="small-code">require-dev</span>, które oznacza pakiet tylko dla środowiska deweloperskiego, ale o tym kiedy indziej), <span class="small-code">twig/twig</span> to nazwa pakietu w formacie <i>użytkownik/nazwa</i>. Te oczywiście mogą być różne, w tym przykładzie są identyczne. <span class="small-code">^2.0</span> to oznaczenie wersji. Tę można zapisać na wiele sposobów, zarówno wskazując jedną dokładną, jak i pewien zakres. Jeśli jesteś zainteresowany to w dokumentacji Composera jest <a href="https://getcomposer.org/doc/articles/versions.md" target="_blank" class="content__link">cała sekcja</a> na ten temat, a na dole <a href="https://getcomposer.org/doc/articles/versions.md#summary" target="_blank" class="content__link">krótsze podsumowanie</a> - na razie nie chciałbym tutaj wchodzić w takie szczegóły. Możesz również wcale nie podać wersji, zostanie wtedy automatycznie dobrana najnowsza możliwa.
Drugim najczęściej używanym poleceniem jest <span class="small-code">install</span> - <span class="small-code">composer install</span>. Instaluje ono pakiety i ich zależności zdefiniowane w pliku <i>composer.json</i>. Zastanowisz się być może teraz po co nam osobno <span class="small-code">install</span> i <span class="small-code">require</span>, a więc śpieszę wyjaśnić: <span class="small-code">require</span> używamy, gdy chcemy dopisać nowy pakiet, jest on wtedy dodawany do <i>composer.json</i> i pobierany. Z kolei <span class="small-code">install</span> użyjemy, gdy chcemy zainstalować to wszystko od zera, inaczej mówiąc gdy właśnie pobraliśmy jakiś projekt, mamy wypełniony <i>composer.json</i> i chcemy pobrać zdefiniowane tam zależności.
Z kolei gdy mamy już zainstalowane pakiety, a chcielibyśmy je zaktualizować - na przykład wydana została kolejna wersja danej biblioteki - możemy skorzystać z polecenia <span class="small-code">composer update</span>. Tutaj warto zaznaczyć, że Composer nigdy nie wyjdzie poza określoną w konfiguracji wersję. To znaczy, że jeśli ustawimy "na sztywno" wersję <i>1.0.0</i>, to pomimo wydania kolejnych ta się nie zmieni. Gdy jednak wersja zostanie określona jak w przykładzie Twiga, czyli <i>^2.0</i> to pobrana zostanie każda wersja niższa od 3. Tak więc <span class="small-code">update</span> działa pod naszą pełną kontrolą.
Tworząc nowy projekt możesz też skorzystać z <span class="small-code">composer init</span>. Polecenie to uruchamia kreator tworzący nowy plik <i>composer.json</i> wraz z podstawowymi danymi. Będą one wymagane w przypadku gdybyś chciał stworzyć własny pakiet i opublikować go, na przykład na wspomnianym już packagist.org. W pozostałych przypadkach nie są konieczne, jednak ich wypełnienie na pewno w niczym nie zaszkodzi. Oczywiście gdy po wygenerowaniu tego pliku użyjemy np. <span class="small-code">composer require/require-dev</span> plik nie zostanie nadpisany, zależności zostaną tylko dopisane.
<figure class="content__gallery content__gallery--center"><img src="/images/projekt-obiektowy-internetowy-notes/1-composer-init.png" alt="Interaktywne polecenie composer init" class="content__image"></figure>Myślę, że to wystarczające informacje na start z Composerem. Nawet jeśli teraz wydaje się nieco zagmatwane, to uwierz, że szybko wejdzie Ci w nawyk i stanie się oczywistością przy pracy w PHP.
Komentarze