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.