Composer - Online kurz
Sťahujete a načítate do projektu cudzej knižnice ručne? Tak s tým je navždy koniec! Privítajte Composer - nástroj pre správu PHP závislostí, ktorý by mal poznať každý PHP programátor. V tomto tutoriále si vysvetlíme, čo to ten Composer je, ako si ho nainštalovať, a ako ho používať.
Článok predpokladá, že ste sa už s PHP stretli a máte ho nainštalované. Ak nie, pozrite si najprv Základná konštrukcia jazyka PHP.
Čo je Composer?
Composer je multiplatformový nástroj pre jednoduchú správu závislostí v PHP. Dovoľuje nám deklarovať knižnice, na ktorých je náš PHP projekt závislý, a následne tieto závislosti inštalovať a aktualizovať. Tiež môžeme definovať cesty pre automatické načítanie tried nášho projektu (autoloading) a prípadne si definovať skratky k skriptom, ktoré nám môžu uľahčiť prácu pri tvorbe projektu. Rovnako sa pomocou Composer zakladajú nové projekty v známych PHP frameworkoch, napr. Také Symfony sa bez Composer moc nezaobíde.
Domovskou stránkou Composer je stránka https://getcomposer.org/, na ktorej je zaujímavá hlavne dokumentácia, na ktorú v článku odkazujem.
Oficiálnym repozitára PHP balíčkov je Packagist, ktorý nájdete na stránkach https://packagist.org/. Do vyhľadávacieho políčka stačí zadať názov požadovaného balíčku alebo kľúčové slová, a vybrať si najvhodnejšie riešenie z výsledkov hľadania.
Závislosti sú potom definované v súbore composer.json
v
koreňovom priečinku nášho projektu. Jednotlivým závislostiam môžeme
nastavovať požadované verzie a tie sú automaticky sťahované do zložky
vendor
.
Inštalácia Composer
Composer je PHP skript zabalený do súboru composer.phar
a pre
svoj beh vyžaduje nainštalované PHP minimálne vo verzii 5.3.2. Ďalšou
požiadavkou môže byť prítomnosť softvéru git,
svn, fossil alebo HG v závislosti na tom, v čom sú požadované balíčky
verzované, ale na to by mal Composer v prípade potreby upozorniť.
Composer je možné nainštalovať lokálne alebo globálne.
- Lokálna inštalácia znamená, že si pridáme súbor
composer.phar
do koreňového priečinka nášho projektu ako časť projektu a bude dostupný iba tam (najčastejšie pomocou príkazuphp composer.phar ...
). - Globálne inštalácia naopak znamená to, že máme iba jednu kópiu
súboru
composer.phar
, používanú naprieč celým systémom (najčastejšie pomocou príkazucomposer ...
).
Windows, globálny pomocou inštalátora
Windowsáci to majú v skutku jednoduché. Stačí si stiahnuť inštalátor
Composer-Setup.exe a
nainštalovať Composer ako klasickú aplikáciu. Počas inštalácie sa upraví
systémová PATH
, aby sa dal Composer pohodlnejšie ovládať.
Inštalátor by mal automaticky nájsť vašu inštaláciu PHP (teda cestu k
súboru php.exe
), ale v prípade neúspechu ho verím zvládnete
naviesť (Ak používate xampp, bude interpreter pravdepodobne v C: \ xampp \
php \ php.exe).
Po skončení inštalácie si zatvorte všetky konzoly (terminály), otvorte
nové okno príkazového riadka a vyskúšajte príkaz
composer --version
. Výsledok by mal byť podobný
nasledovnému:
Composer version 1.5.1 2017-08-09 16:07:22
Ak chcete, môžete si ho nainštalovať aj manuálne, postup nájdete na stránke https://getcomposer.org/doc/00-intro.md....
Linux, MacOS, BSD ...
UNIXáci to majú tiež ľahké, stačí k tomu 4 príkazy. Tieto príkazy
vyzerajú nasledovne, ale prosím, skopírujte si ich zo stránky https://getcomposer.org/download/,
nekopírujte je odtiaľto! Obsahujú totiž hash súboru
composer-setup.php
, ktorý sa mení pri každej jeho úprave a je
to tak z bezpečnostných dôvodov.
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('SHA384', 'composer-setup.php') === '---hash---') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" php composer-setup.php php -r "unlink('composer-setup.php');"
Každopádne, príkazy pomocou PHP získajú súbor
composer-setup.php
, overí jeho pravosť, spustí ho, a následne
vymažú. Výsledkom je súbor composer.phar
, čo je vlastne
Composer samotný, ktorý sa dá ihneď používať.
Ak ho chcete globálne pre celý systém, skopírujte súbor
composer.phar
do zložky, v ktorej sú vo vašom systéme
spustiteľné súbory (mám na mysli konzolové programy dostupné v
PATH
). V mojom prípade (Ubuntu 16.04) ide o zložku
/usr/local/bin/
, do ktorej stačí súbor
composer.phar
presunúť. Aby sme si zjednodušili prácu, pri
presúvaní vynecháme príponu .phar
, a v prípade
nedostatočných práv použijeme sudo
. Príkaz vyzerá
nasledovne:
sudo mv composer.phar /usr/local/bin/composer
Composer tak môžeme používať v celom systéme príkazom
composer ...
, napríklad: composer --version
.
Pre ďalšie čítanie váš odkaz na https://getcomposer.org/download/ a https://getcomposer.org/...matically.md.
Pre oba systémy - ak chcete Composer lokálne pre projekt, skopírujte si
súbor composer.phar
do koreňového priečinka projektu (tam, kde
máte súbor composer.json
) a používajte s pomocou PHP príkazu
php composer.phar ...
.
Súbor composer.json
Používanie Composer sa potom točí okolo súboru
composer.json
. Ten máme v jednotlivých projektoch, kde je
špecifikované aké závislosti daný projekt má. Máme tu v JSON
formáte definované údaje ako povinný názov balíčka (tvorí názov tvorca
a názve projektu oddelených lomkou), opis balíka, typ balíčka, kľúčové
slová balíčka, licenciu balíka (napr. MIT
, možno definovať
viac licencií, balíčky s uzavretou licencií mali hodnotu
proprietary
) a podobne. Všetky možnosti nájdete v oficiálnej
dokumentácii na adrese https://getcomposer.org/...04-schema.md.
Ukážme si, ako môže takýto súbor composer.json
vyzerať.
Neľakajte sa zložité štruktúry, súbor si nechávame vygenerovať pomocou
príkazov, viď ďalej.
{ "name": "matusko/example", "description": "This is example project", "type": "project", "license": "MIT", "keywords": [ "example", "zf" ], "homepage": "https://www.example.com/", "minimum-stability": "dev", "prefer-stable": true, "require": { "php": "^5.6 || ^7.0", "zendframework/zend-component-installer": "^1.0 || ^0.7 || ^1.0.0-dev@dev", "zendframework/zend-mvc": "^3.0.1", "doctrine/doctrine-orm-module": "^1.1" }, "require-dev": { "zendframework/zend-developer-tools": "^1.1.0", "zendframework/zend-test": "^3.0.1" }, "autoload": { "psr-4": { "Common\\": "module/Common/src/", "Admin\\": "module/Admin/src/", "Application\\": "module/Application/src/" } }, "autoload-dev": { "psr-4": { "ApplicationTest\\": "module/Application/test/" } } }
Závislosti sú definované pod kľúčom require
. Ak chceme
definovať závislosti potrebné pre vývoj, môžeme ich pridať pod kľúčom
require-dev
. Ako vidíte, pre každú závislosť je definovaná
požadovaná verzia. O verziách je napísané na stránke https://getcomposer.org/.../versions.md....
Ak chceme využiť Composer aj pre AutoLoad tried nášho projektu, môžeme
to v súbore composer.json
definovať. Odporúča sa použiť PSR-4, ale možno
použiť aj PSR-0, generovanie mapy tried (classmap) a vkladanie súborov
(files).
Pri používaní nástroja Composer sa nám bude generovať ešte súbor
composer.lock
. Ten v sebe uchováva práve zoznam balíčkov aj s
ich presnými verziami, a to sa nám môže hodiť.
Základné príkazy
Composer sa ovláda pomocou príkazového riadku. Všetky príkazy si môžete prezrieť na adrese https://getcomposer.org/doc/03-cli.md. Teraz si príkazy prejdeme a v ďalšej časti článku si vykonáme praktickú ukážku využitia Composer na konkrétnom projekte.
Pre zjednodušenie príkazov článok predpokladá, že máte Composer nainštalovaný globálne. Pred spustením príkazov sa musíte v príkazovom riadku presunúť do zložky s projektom, ktorý chcete spravovať! Príkazový riadok vo Windows spustíte stlačením klávesu s logom Windows a napísaním textu "cmd", čo nájde program Príkazový riadok. Príkaz pre presun do zložky môže vo Windows vyzerať napr. Nasledovne:
cd C:\Users\Matusko\Dropbox\projekt
Linuxáci tieto skills iste ovládajú
Init
Príkazom composer init
je možné vygenerovať súbor
composer.json
. Tiež nás prevedie cez nastavenia základných
údajov ako názov projektu, popis projektu, verzia projektu, a podobne, aby sme
na nič podstatné nezabudli.
Install
Príkaz composer install
stiahne do zložky vendor balíky
definované v súbore composer.json
a vygeneruje súbor
composer.lock
.
Ak v projekte už súbor composer.lock
máte (napr. Pri
nasadzovaní projektu na server), príkaz composer install
stiahne
presne tie verzie balíčkov, ktoré sú definované v súbore
composer.lock
(as ktorými projekt pravdepodobne funguje, pretože
ste s nimi projekt vyvíjali) .
Require
Príkaz composer require ...
je práve tým spôsobom, ktorým
do projektu pridáte balíčky. Napr. ak chceme používať balíček phpmailer /
phpmailer, použijeme príkaz
composer require phpmailer/phpmailer
. Súbor
composer.lock
je tiež aktualizovaný.
Samozrejme môžeme balíčky pridať ručne úpravou súboru
composer.json
, v tom nám nič nebráni.
Update
Ak chcete aktualizovať všetky balíky na novšie verzie, použite príkaz
composer update
. Composer balíčky aktualizuje len na také
verzie, ktoré zodpovedajú požadovaným verziám definovaným v
composer.json
. Súbor composer.lock
je tiež
aktualizovaný.
Pokiaľ chcete aktualizovať len nejaký konkrétny balíček na novšiu
verziu, stačí k príkazu pridať názov identifikátora balíčka, napr. Pre
aktualizáciu balíka [phpmailer / phpmailer] https://packagist.org/…er/phpmailer)
použijete príkaz composer update phpmailer/phpmailer
.
Dump-AutoLoad
Composer nám okrem správy závislostí ponúka možnosť definovať cesty
pre menné priestory. Ak sme si definovali napríklad novú PSR-4 cestu k triedam,
musíme zavolať príkaz composer dump-autoload
, aby sa vygeneroval
nový súbor vendor/autoload.php
. Ten budeme neskôr potrebovať
pre napojenie projektu na Composer balíčky.
Self-update
Composer sa dokáže sám aktualizovať a to príkazom
composer self-update
. Jednoducho z internetu stiahne svoje novšie
ja a nahradí ním sám seba.
Clear-cache
Na serveri nás môže zaskočiť to, že projekt aj so všetkými
závislosťami zaberá 100MB, ale hosting vykazuje 200MB použitého miesta.
Neľakajte sa, to si len Composer cachuje už stiahnuté balíčky pre prípad,
že ich budeme znovu potrebovať, ale nechceme ich znovu sťahovať. Cache
Composer vymažeme príkazom composer clear-cache
.
Diagnose
Akonáhle má Composer s niečím problém, môžeme spustiť príkaz
composer diagnose
. Môže nám vypísať dôležité informácie o
tom, kde nastala chyba.
To je pre predstavenie príkazov všetko. Ak tu váš obľúbený chýba, napíšte do komentárov a ja ho pridám. Nasleduje praktická ukážka napojenie projektu na Composer.
Napojenie projektu na Composer
Už vieme čo to ten Composer je, máme ho nainštalovaný, a poznáme niekoľko užitočných príkazov. Poďme si na praktické ukážke skúsiť napojenie projektu na Composer.
Vytvoríme si novú zložku pre náš projekt, ja som svoj projekt nazval
composer-example
, a v ňom si vytvorte prázdny súbor
index.php
.
Aby sme mohli Composer v našom projekte využívať, musíme do nášho
kódu vložiť súbor vendor/autoload.php
, ktorý v sebe obsahuje
autoloader tried a súborov cudzích balíčkov. Samotné vloženie by vyzeralo
nasledovne:
<?php require __DIR__ . '/vendor/autoload.php';
Nette, Symfony, Zend a iné frameworky to už majú vyriešené za nás, ale ak máme projekt postavený na vlastnom kóde, musíme si to zariadiť sami. Kde však tento súbor zoženieme my?
Musíme si v zložke nášho projektu vytvoriť súbor
composer.json
. Nebudeme ho ale vytvárať ručne, použijeme
príkaz composer init
a vyplníme niekoľko základných údajov,
na ktoré sa nás Composer opýta. Nezabudnite sa v príkazovom riadku
presunúť do zložky so svojím projektom! V mojom prípade postup
vyzeral nasledovne:
Iba som jednoducho Enterom potvrdzoval to, čo mi Composer ponúkol.
Výsledkom je súbor composer.json
, kde je povinný názov
projektu, zoznam autorov a prázdny objekt pre závislosti nášho projektu.
Vymyslite si napríklad, že náš projekt bude potreboval populárny
knižnicu PHPMailer. V ďalšom kroku pridáme externý balík phpmailer /
phpmailer v poslednej dostupnej verzii. Ako som už písal vyššie,
použijeme na to príkaz composer require ...
, konkrétne:
composer require phpmailer/phpmailer
V mojom terminálu sa dialo nasledovné:
V tomto prípade sa nám stiahol nový balík do zložky vendor
a štruktúra celého nášho projektu tak vyzerá nasledovne:
V tomto prípade už máme vygenerovaný aj súbor
vendor/autoload.php
, o ktorom som už písal. Ten si musíme
requirovat v súbore index.php
a následne môžeme používať
balíček phpmailer
/ phpmailer. Príklad použitia môžete vidieť na nasledujúcom obrázku a
na konci článku máte pridaný zdrojový kód tohto príkladu.
Čo verzovat a čo nie?
Pokiaľ na svoj projekt používate nejaký verzovacie systém (napr. Git), určite vás napadla otázka: Čo mám a čo nemám verzovat?
Verzovat
- súbor
composer.json
- Sú v ňom definovanej závislosti projektu. - súbor
composer.lock
- Je generovaný automaticky pri zmene závislostí. Práve vďaka tomuto súboru si Composer pamätá presné verzia závislostí, s ktorými ste projekt vyvíjali a používali. To je užitočné práve z toho dôvodu, keď si na server chcete nasadiť projekt. Príkazcomposer install
postahuje presne také verzie závislostí, ktoré sú vcomposer.lock
uložené. Máte tak istotu, že sa nerozbili niektoré závislosti, kedy by vám projekt pri vývoji fungoval, ale pri nasadení už nie.
Neverzovat
- zložku
vendor
- Sťahujú sa do nej závislosti projektu, ktoré máte definované v súborecomposer.json
a nie je žiadny dôvod tieto závislosti skladovať vo vlastnom úložisku.
Na záver
Nesťahujte a neaktualizajte závislosti vašich projektov ručne! Používajte Composer, uľahčí vám prácu
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 144x (498.53 kB)
Aplikácia je vrátane zdrojových kódov v jazyku PHP