Composer - správce PHP balíčků
Instalace composeru
Composer nainstalujeme nejlépe dle návodu na oficiálních stránkách, pomocí instalátoru na Windows nebo stažením a instalací na MacOS/Linuxu.
Instalace balíčků
Všechny balíčky, které náš projekt potřebuje a jsou definovány v composer.json
, nainstalujeme příkazem composer install
. Pokud náš projekt obsahuje soubor composer.lock
nainstalují se konkrétní verze, které jsou zapsány v tomto souboru.
Příkaz composer install
má několik parametrů, díky kterým můžeme specifikovat co všechno chceme nainstalovat.
Pro produkční sestavení aplikace používám tyto parametry:
- --no-dev
– neinstaluje dev závislosti ze sekce require-dev
, protože balíčky pro testy jako třeba phpunit/phpunit
na produkci nejsou potřeba.
- --no-interaction
– composer nebude chtít abychom zadali nějaký vstup, protože build aplikace je automatizovaný a spouští se na CI/CD serveru a ručně tak není možné nic zadat
- --prefer-dist
– instaluje dist
balíčky, které neobsahují nepotřebné věci, jsou tak menší a build je rychlejší
- --optimize-autoloader
– vygeneruje classmapu pro autoloading dle PSR-0/4 pravidel pro rychlejší autoloading
Celý příkaz je tedy:
composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader
Přidání balíčku
Přidat PHP balíček jako novou závislost můžeme jednoduše pomocí příkazu composer require
.
Např. pro instalaci knihovny monolog spustíme composer require monolog/monolog
.
Závislost se nám automaticky přidá v souboru composer.json
do sekce require
.
Pokud chceme nainstalovat nástroje, které jsou potřeba pouze při vývoji a testování, můžeme použít parametr --dev
.
Příkaz composer require --dev phpunit/phpunit
nainstaluje balíček pro testování phpunit jako dev
závislost a umístí do sekce require-dev
v souboru composer.json
.
Přidání specifické verze balíčku
Nainstalovat konkrétní verzi balíčku můžeme specifikací verze: composer require monolog/monolog:^1.2
.
Tabulka významů značek ~
a ^
Verze | Vyhovuje | Poznámka |
---|---|---|
1.2.3 | 1.2.3 | Přesně konkrétní verze |
~1.2 | >=1.2, <2.0.0 | |
~1.2.3 | >=1.2, <1.3.0 | |
^1.2 | >=1.2, <2.0.0 | |
^1.2.3 | >=1.2, <2.0.0 | |
^0.2 | >=0.2.0, <0.3.0 | Toto platí pouze do verze 1.0.0 |
Aktualizace balíčků
Příkazem composer outdated
je možné hromadně zkontrolovat aktualizace nainstalovaných balíčků.
❯ composer outdated
symfony/cache v5.0.7 v5.0.8 Symfony Cache component with PSR-6, PSR-16, and tags
symfony/config v5.0.7 v5.0.8 Symfony Config Component
symfony/console v5.0.7 v5.0.8 Symfony Console Component
symfony/dependency-injection v5.0.7 v5.0.8 Symfony DependencyInjection Component
symfony/error-handler v5.0.7 v5.0.8 Symfony ErrorHandler Component
symfony/event-dispatcher v5.0.7 v5.0.8 Symfony EventDispatcher Component
symfony/filesystem v5.0.7 v5.0.8 Symfony Filesystem Component
symfony/finder v5.0.7 v5.0.8 Symfony Finder Component
symfony/http-foundation v5.0.7 v5.0.8 Symfony HttpFoundation Component
symfony/http-kernel v5.0.7 v5.0.8 Symfony HttpKernel Component
symfony/mime v5.0.7 v5.0.8 A library to manipulate MIME messages
symfony/options-resolver v5.0.7 v5.0.8 Symfony OptionsResolver Component
symfony/process v5.0.7 v5.0.8 Symfony Process Component
symfony/stopwatch v5.0.7 v5.0.8 Symfony Stopwatch Component
symfony/var-dumper v5.0.7 v5.0.8 Symfony mechanism for exploring and dumping PHP variables
symfony/yaml v5.0.7 v5.0.8 Symfony Yaml Component
V prvním sloupci vidíme název balíčku, v druhém nainstalovanou verzi a ve třetím nejnovější dostupnou verzi.
Aktualizaci všech balíčků provedeme příkazem composer update
. Také je možné aktualizovat pouze jeden konkrétní balíček.
Např. composer update symfony/filesystem
– provede aktualizaci balíčku symfony/filesystem
na nejnovější dostupnou verzi.
Složka vendor
Všechny nainstalované závislosti jsou uloženy ve složce vendor
.
Složka se automaticky vytvoří po spuštění composer install
, nemusíme ji tedy commitovat do GIT repozitáře a je vhodné ji umístit do souboru .gitignore
.
Skripty
Composer umožňuje spouštět skripty, které si definujeme v souboru composer.json
v sekci scripts
.
{
"scripts": {
"tests": [
"vendor/bin/tester -p php -c tests/php.ini tests"
]
}
}
Skript spustíme příkazem composer run tests
.
Skripty se hodí pokud chceme provádět stejný příkaz na více místech – např. spouštět testy a code checker na lokálním stroji a také na CI serveru.
Když změníme nějaký parametr pro spuštění testu, nemusíme pak změnu provést na dvou místech – localu a CI serveru, ale pouze na jednom – v souboru composer.json
.