Composer slouží k instalaci balíčků a jejich závislostí pro vývoj v PHP. Podobně funguje například npm pro NodeJS. Skoro také pip pro Python, ale ten instaluje balíčky globálně, zatímco Composer lokálně k projektu. Dají se instalovat i globálně, ale to řešit nebudeme.
O tom, jak přidat vlastní balíček do Packagist, aby jej bylo možné instalovat pomocí Composeru je zde samostatný článek.
UPDATE 11.11.2017: Doplnění informace o lokální instalaci
Instalace
Celý Composer je napsán v PHP, takže instalace pro Linux je jednoduchá. Pro Windows možná ještě jednodušší, protože existuje installer. Nejvhodnější ale asi je lokální instalace.
Lokální - preferovaná
Nevýhoda instalovaných verzí ať pro Linux (při přidání do path) či Windows je skutečnost, že jsou závislé na hlavní instalované verzi PHP. Někdy je ale instalací, a tím verzí PHP, několik. Poté je vhodné vždy určit interpreter pomocí celé cesty a využít souboru composer.phar umístěného u daného projektu.
C:/cesta_k_php/php5.6/php.exe composer.phar [...]
Windows
Stačí stáhnout Composer Installer.exe a nainstalovat. Doporučuji zvolit přidání do PATH, a na konci instalace jen uvedete cestu k php.exe, nejspíše C:\xampp\php\php.exe.
Linux
Instalace pro Linux je také velmi jednoduchá, stačí zkopírovat a vložit do příkazové řádky tyto 4 příkazy ze sekce Command-line instalation. Ve složce spuštění vám bude vytvořen soubor composer.phar. Nyní máte 2 možnosti spouštění:
# Spouštění pomocí cesty, php interpreter není nutné uvádět /path/to/composer.phar --version php /path/to/composer.phar --version # Zkopírovat do path a spouštět pouze pomocí příkazu composer sudo mv composer.phar /usr/local/bin/composer # Nyní stačí spouštět takto composer --version
Použití a repozitář balíčků
Repozitář pro Composer se nazývá Packagist, zde si stačí najít balíček, který chcete a nainstalujete pomocí Composeru včetně všech závislostí.
composer require mfacenet/hello-world
Composer obsahuje autoloader, takže není nutné provádět include pro všechny soubory. To dává smysl, protože balíček může mít obrovské množství závislostí, které vás vlastně ani nezajímají.
include dirname(__FILE__).'/vendor/autoload.php'; echo HelloWorld\SayHello::world();
composer.json a instalace
Pokud provedeme composer require, vytvoří se automaticky 2 soubory composer.json a composer.lock. Nebudeme se zabývat rozdíly, ale oba je dobré uložit na git a vynechat složku vendor . Na jiném PC stačí pouze nainstalovat všechny potřebné balíčky z composer souborů, podobně jako funguje package.json, o tom jsem psal v článku o Gruntu.
# Nainstaluje všechny balíčky uložené v composer.lock či composer.json composer install
Autoload vlastních tříd mimo Packagist
Co když si napíšeme vlastní třídu, která není ve složce vendor, ale chceme pro ni využít autoloader? I toto je možné. Je nutné upravit composer.json.
{ "require": { "mfacenet/hello-world": "^1.0" }, "autoload": { "classmap": ["library/"], "psr-0": { "MojeTridy\\": "app/" } } }
UPDATE 11.11.2017: Od publikace Resampleru na packagist již využívá namespace a proto tato ukázka platí pouze pro verzi 0.1.
Pokud například chceme načítat třídu Resampler z předchozího článku, která neobsahuje žádný namespace, umístíme ji do složky library a do autoload přidáme classmap. Poté je nutné pro přegenerování souborů composeru v příkazové řádce spustit
composer update
Pokud třídy splňují pouze starší standard PSR-0 nebo novější PSR-4, umístíme je do autoload pod dané klíčové slovo. Composer toho umí ještě více, ale to už je v dokumentaci.
V dalších článcích se zaměřím také na ukázku publikování Resampleru do Packagist. Pokud používáte Composer ještě jiným zajímavým způsobem, podělte se v komentářích.
K tomuto článku již není možné přidávat další komentáře