IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

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íkazu php 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íkazu composer ...).

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:

Príkaz v termináli – composer init - Ostatné tutoriály v PHP

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é:

Príkaz v termináli – composer require phpmailer / phpmailer - Ostatné tutoriály v PHP

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:

Štruktúra PHP projektu s Composer a PHPMailerem - Ostatné tutoriály v PHP

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.

Ukážkový príklad použitia phpmaileru - Ostatné tutoriály v PHP

Č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íkaz composer install postahuje presne také verzie závislostí, ktoré sú v composer.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úbore composer.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

 

Všetky články v sekcii
Ostatné tutoriály v PHP
Preskočiť článok
(neodporúčame)
Práca s MySQL v PHP - použitie základného ovládača
Článok pre vás napísal Matúš Petrofčík
Avatar
Užívateľské hodnotenie:
1 hlasov
Autor sa rád venuje spánku.
Aktivity