Composer jest popularnym narzędziem do zarządzania zależnościami dla PHP, stworzony głównie w celu ułatwienia instalacji i aktualizacji zależności projektu. Composer będzie sprawdzać jakie pakiety konkretnego projektu są zależne i zainstaluje je, stosując odpowiednie wersje w zależności od wymagań projektu.
Ten artykuł wyjaśni jak zainstalować i rozpocząć pracę z Composerem w systemie Ubuntu 16.04.
Wymagania
Będziesz potrzebował:
- System Ubuntu 16.04
- Dostęp do serwera jako zwykły użytkownik z uprawnieniami sudo
Krok #1 — Instalacja zależności
Zanim pobrać i zainstalować Composer, musimy upewnić się że nasz serwer ma zainstalowane wszystkie zależności.
Najpierw należy zaktualizować pamięć podręczną menedżera pakietów za pomocą polecenia:
sudo apt-get update
Teraz zainstalujemy zależności. Będziemy potrzebować curl
, aby pobrać Composer oraz php-cli
, aby instalować i uruchomić go. Pakiet php-mbstring
jest konieczny dla zapewnienia funkcji biblioteki którą będziemy używać. git
jest używany przez Composera do pobierania zależności projektu i unzip
do rozpakowania skompresowanych pakietów. Wszystko można zainstalować za pomocą następującego polecenia:
sudo apt-get install curl php-cli php-mbstring git unzip
Teraz można przejść do następnego kroku.
Krok #2 – Pobieranie i instalowanie Composera
Composer oferuje instalator, napisany w PHP. Upewnij się, że jesteś w swoim katalogu domowym i pobierz instalator za pomocą curl
:
cd ~
curl -sS https://getcomposer.org/installer -o composer-setup.php
Następnie należy uruchomić krótki skrypt PHP, aby upewnić się, że instalator hash SHA-384 odpowiada do najnowszego instalatora znalezionego na stronie Composer Public Keys / Signatures. Należy upewnić się, że można zastąpić hash najnowszym dla podświetlonej wartości poniżej:
php -r "if (hash_file('SHA384', 'composer-setup.php') === '92102166af5abdb03f49ce52a40591073a7b859a86e8ff13338cf7db58a19f7844fbc0bb79b2773bf30791e935dbd938') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
Installer verified
Aby zainstalować composer globalnie, należy użyć następującego polecenia:
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
Spowoduje to pobranie i instalacje Composera jako polecenia ogólnosystemowego o nazwie composer, pod /usr/local/bin. To powinno wyglądać w następujący sposób:
All settings correct for using ComposerDownloading 1.1.1... Composer successfully installed to: /usr/local/bin/composerUse it: php /usr/local/bin/composer
Aby przetestować instalację, uruchom:
composer
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.1.1 2016-05-17 12:25:44
Usage:
command [options] [arguments]
Options:
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
--profile Display timing and memory usage information
--no-plugins Whether to disable plugins.
. . .
Oznacza to, że Composer został pomyślnie zainstalowany w systemie.
W tym przypadku instalacja może być wykonana po pobraniu i sprawdzeniu instalacji skryptu, jak opisano powyżej, na przykład tak:
php composer-setup.php
Spowoduje to wygenerowanie composer.phar pliku w bieżącym katalogu, który może być wykonany z ../composer.phar command.
Krok #3 – Generowanie pliku composer.json
W celu wykorzystania Composera w swoim projekcie, potrzebujesz plik composer.json. Plik composer.json w zasadzie mówi Composeru które zależności należy pobrać do swojego projektu i jakie wersje każdego pakietu mogą być zainstalowane. Jest to niezwykle ważne, aby zachować projekt spójny oraz uniknąć instalowania niestabilnych wersji, które potencjalnie mogą powodować problemy z kompatybilnością.
Nie ma potrzeby, aby tworzyć ten plik ręcznie ponieważ łatwo wpaść na błędy składniowe, gdy to robisz. Composer automatycznie generuje plik composer.json po dodaniu zależności do projektu za pomocą polecenia require
. Dodatkowe zależności również mogą być dodane w taki sam sposób, bez konieczności ręcznego edytowania tego pliku.
Proces wykorzystania Composera do zainstalowania pakietu zależności w projekcie zazwyczaj obejmuje następujące etapy:
- Określenie, jaki rodzaj biblioteki aplikacji jest potrzebny.
- Badania odpowiedniej biblioteki open source na Packagist.org, oficjalnym repozytorium pakietów dla Composer.
- Wybór pakietu, który musi być zależny.
- Uruchomienie
composer require
dla włączenia zależności w pliku json i instalowanie pakietu.
Zobaczymy jak to działa w praktyce za pomocą prostej demo aplikacji.
Celem tej aplikacji jest przekształcenie tego wyrażenia w ciąg URL. To jest powszechnie stosowane do konwersji tytułów stron do ścieżki URL.
Zacznijmy od stworzenia katalogu dla naszego projektu. Będziemy go nazywać slugify:
cd ~
mkdir slugify
cd slugify
Wyszukiwanie pakietów na Packagist
Teraz wyszukamy Packagist.org dla pakietu, który może pomóc nam w generowaniu “slugs“. Jeśli szukać wyrażenia “slug” na Packagist, dostaniesz wynik podobny do tego:
Zobaczysz dwie cyfry po prawej stronie każdego pakietu na liście. Numer na górze oznacza ile razy pakiet został zainstalowany, a numer na dole pokazuje ile razy pakiet został oznaczony na GitHub. Możesz sortować wyniki wyszukiwania na podstawie tych liczb (poszukaj dwóch ikon po prawej stronie paska wyszukiwania). Ogólnie, pakiety z dużą ilością instalacji i dużą ilością gwiazd, jak zwykle, będą bardziej stabilne, ponieważ bardzo dużo ludzi z nich korzysta. Ważne jest również, aby sprawdzić opis pakietu na wiarygodność – czy jest to naprawdę to, czego szukasz?
Z wyników wyszukiwania, wydaje się że pakiet cocur/slugify jest dobry, z rozsądną ilością ustawień i gwiazd. (Pakiet jest nieco poniżej w dół strony, niż widać na zrzucie ekranu).
Można zauważyć, że pakiety na Packagist mają nazwę dostawcy i nazwę pakietu. Każdy pakiet ma unikatowy identyfikator (namespace), w tym samym formacie GitHub wykorzystuje do swoich repozytoriów: vendor/package. Biblioteka, którą chcemy zainstalować używa nazwy cocur/slugify.
Przestrzeń nazw jest to, czego potrzebujemy do tego, aby zażądać pakietem w naszym projekcie.
Wymaganie Package
Teraz kiedy wiemy dokładnie, który pakiet chcemy zainstalować, możemy uruchomić composer require
w celu włączenia go jako zależności, a także wygenerować plik composer.json dla projektu:
composer require cocur/slugify
Using version ^2.1 for cocur/slugify ./composer.json has been created Loading composer repositories with package information Updating dependencies (including require-dev) - Installing cocur/slugify (v2.1.1) Downloading: 100% Writing lock file Generating autoload files
Jak widać, Composer automatycznie postanowił, jaką wersję pakietu stosować. Jeśli spojrzeć na katalog projektu teraz, będzie on zawierał dwa nowe pliki: composer.json i composer.lock oraz katalog vendor :
ls –l
total 12 -rw-rw-r-- 1 sammy sammy 59 May 17 10:24 composer.json -rw-rw-r-- 1 sammy sammy 2894 May 17 10:24 composer.lock drwxrwxr-x 4 sammy sammy 4096 May 17 10:24 vendor
Plik composer.lock jest używany do przechowywania informacji, o zainstalowanych wersjach każdego pakietu i bądź pewny, że te same wersje są używane, jeśli ktoś kopiuje projekt i instaluje jego zależności. W katalogu vendor znajdują się zależności projektu. Katalog vendor nie powinien być zobowiązany do systemu kontroli wersji – trzeba tylko włączyć pliki composer.json i composer.lock.
Zrozumienie ograniczenia wersji
Jeśli sprawdzisz zawartość swojego pliku composer.json, zobaczysz coś takiego:
cat composer.json
{
"require": {
"cocur/slugify": "^2.1"
}
}
Można zauważyć znak specjalny ^ przed numerem wersji w composer.json. Composer obsługuje kilka różnych ograniczeń i formaty do określenia wymaganej wersji pakietu, w celu zapewnienia elastyczności przy jednoczesnym zachowaniu projektu stabilnym. Operator kareta (^) używany automatycznie i wygenerowany przez plik composer.json, jest zalecany przez operatora w celu zapewnienia maksymalnej kompatybilności, po semantycznej kontroli wersji . W tym przypadku, to określa 2.1 jako minimalna zgodna wersja, a także pozwala na aktualizacje do każdej przyszłej wersji poniżej 3.0 .
Ogólnie, nie trzeba manipulować ograniczeniami wersji w swoim pliku composer.json. Jednak pewne sytuacje mogą wymagać ręcznej edycji ograniczeń – na przykład, kiedy duża nowa wersja wymaganej biblioteki jest dostępna i chcesz uaktualnić ją lub gdy chcesz używać biblioteki, nie należy semantyczne zarządzanie wersjami.
Oto kilka przykładów, które dają lepsze zrozumienie, jak działają ograniczenia wersji Composera:
Ograniczenie | Znaczenie | Przykład wersji |
---|---|---|
^1.0 | >= 1.0 < 2.0 | 1.0, 1.2.3, 1.9.9 |
^1.1.0 | >= 1.1.0 < 2.0 | 1.1.0, 1.5.6, 1.9.9 |
~1.0 | >= 1.0 < 2.0.0 | 1.0, 1.4.1, 1.9.9 |
~1.0.0 | >= 1.0.0 < 1.1 | 1.0.0, 1.0.4, 1.0.9 |
1.2.1 | 1.2.1 | 1.2.1 |
1.* | >= 1.0 < 2.0 | 1.0.0, 1.4.5, 1.9.9 |
1.2.* | >= 1.2 < 1.3 | 1.2.0, 1.2.3, 1.2.9 |
Aby zobaczyć więcej ograniczeń wersji Composera, czytaj oficjalnej dokumentacji.
Krok #4 – Włączenie Autoload Script
Ponieważ sam PHP nie obsługuje automatyczne ładowanie klas, Composer zapewnia również skrypt automatycznego ładowania, który można umieścić w swoim projekcie aby uzyskać automatyczne ładowanie za darmo. To sprawia, że znacznie łatwiej jest pracować ze swoimi zależnościami i zdefiniować własne przestrzenie nazw.
Jedyna rzecz, którą musisz zrobić to włączyć plik vendor/autoload.php w swoim skrypcie PHP, przed jakąkolwiek klasą instancji.
Wróćmy do przykładowej aplikacji slugify. Użyjemy nano
do tworzenia skryptu test.php , gdzie użyjemy biblioteki cocur / slugify :
nano test.php
To powinno produkować:
hello-world-this-is-a-long-sentence-and-i-need-to-make-a-slug-from-it
Krok #5 – Aktualizacja zależności projektu
Gdy chcesz zaktualizować zależności projektowe, wystarczy uruchomić polecenie update
:
composer update
Pozwoli to sprawdzić, czy są dostępne nowe wersje bibliotek, wymaganych w projekcie. Jeżeli nowa wersja jest dostępna i jest zgodna z ograniczeniem wersji określonej w pliku composer.json, ona zastąpi poprzednią zainstalowaną wersję. Plik composer.lock zostanie zaktualizowany, aby pokazać te zmiany.
Można również aktualizować jedną lub kilka bardziej specjalistycznych bibliotek za pomocą polecenia:
composer update vendor/package vendor2/package2
Podsumowanie
Ten artykuł obejmuje podstawy do rozpoczęcia pracy z Composerem w Ubuntu 16.04. Composer jest potężnym narzędziem, które powinien mieć każdy programista PHP.
Oprócz zapewniania prostego i niezawodnego sposobu do zarządzania zależnościami projektów, także wyznacza faktycznie nowy standard do wymiany i otwierania PHP pakietów stworzonych przez społeczność.