Composer

Composer je nástroj pro správu závislostí v PHP. Umožní nám vyjmenovat knihovny, na kterých náš projekt závisí, a bude je za nás instalovat a aktualizovat. Ukážeme si:

  • jak Composer nainstalovat
  • jeho použití v novém či stávajícím projektu

Instalace

Composer je spustitelný .phar soubor, který si stáhnete a nainstalujete následujícím způsobem:

Windows

Použijte oficiální instalátor Composer-Setup.exe.

Linux, macOS

Stačí 4 příkazy, které si zkopírujte z této stránky.

Dále vložením do složky, která je v systémovém PATH, se stane Composer přístupný globálně:

$ mv ./composer.phar ~/bin/composer # nebo /usr/local/bin/composer

Použití v existujícím projektu

Abychom mohli ve svém projektu začít používat Composer, potřebujete pouze soubor composer.json. Ten popisuje závislosti našeho projektu a může také obsahovat další metadata. Základní composer.json tedy může vypadat takto:

{
	"require": {
		"nette/database": "^3.0"
	}
}

Říkáme zde, že naše aplikace (nebo knihovna) vyžaduje balíček nette/database (název balíčku se skládá z názvu organizace a názvu projektu) a chce verzi, která odpovídá podmínce ^3.0 (tj. nejnovější verzi 3).

Máme tedy v kořenu projektu soubor composer.json a spustíme instalaci:

composer update

Composer stáhne Nette Database do složky vendor/. Dále vytvoří soubor composer.lock, který obsahuje informace o tom, které verze knihoven přesně nainstaloval.

Composer vygeneruje soubor vendor/autoload.php, který můžeme jednoduše zainkludovat a začít používat knihovny bez jakékoli další práce:

require __DIR__ . '/vendor/autoload.php';

$db = new Nette\Database\Connection('sqlite::memory:');

Vytvoření nového projektu

Nový projekt na Nette vytvoříte pomocí jediného příkazu:

composer create-project nette/web-project nazev-projektu

Jako nazev-projektu vložte název adresáře pro svůj projekt a potvrďte. Composer stáhne repozitář nette/web-project z GitHubu, který už obsahuje soubor composer.json, a hned potom Nette Framework. Mělo by již stačit pouze nastavit oprávnění na zápis do složek temp/ a log/ a projekt by měl ožít.

Verze PHP

Composer vždy instaluje ty verze balíčků, které jsou kompatibilní s verzí PHP, kterou právě používáte. Což ovšem nemusí být stejná verze, jako používá váš hosting. Proto je užitečné si do souboru composer.json přidat informaci o verzi PHP na hostingu a poté se budou instalovat pouze verze balíčků s hostingem kompatibilní:

{
	"require": {
		...
	},
	"config": {
		"platform": {
			"php": "7.2"   # verze PHP na hostingu
		}
	}
}

Packagist.org – centrální repozitář

Packagist je hlavní repozitář, ve kterém se Composer snaží vyhledávat balíčky, pokud mu neřekneme jinak. Můžeme zde publikovat i vlastní balíčky.

Co když nechceme používat centrální repozitář?

Pokud máme vnitrofiremní aplikace, které zkrátka nemůžeme hostovat veřejně, tak si pro ně vytvoříme firemní repozitář.

Více na téma repozitářů v oficiální dokumentaci.

Autoloading

Zásadní vlastností Composeru je, že poskytuje autoloading pro všechny jím nainstalované třídy, který nastartujete includováním souboru vendor/autoload.php.

Nicméně je možné používat Composer i pro načítání dalších tříd i mimo složku vendor. První možností je nechat Composer prohledat definované složky a podsložky, najít všechny třídy a zahrnout je do autoloaderu. Toho docílíte nastavením autoload > classmap v composer.json:

{
	"autoload": {
		"classmap": [
			"src/",      #  zahrne složku src/ a její podsložky
		]
	}
}

Následně je potřeba při každé změně spustit příkaz composer dumpautoload a nechat autoloadovací tabulky přegenerovat. To je nesmírně nepohodlné a daleko lepší je tento úkol svěřit RobotLoaderu, který stejnou činnost provádí automaticky na pozadí a mnohem rychleji.

Druhou možností je dodržovat PSR-4. Zjednodušeně řečeno jde o systém, kdy jmenné prostory a názvy tříd odpovídají adresářové struktuře a názvům souborů, tedy např. App\Router\RouterFactory bude v souboru /path/to/App/Router/RouterFactory.php. Příklad konfigurace:

{
	"autoload": {
		"psr-4": {
			"App\\": "app/"   # jmenný prostor App\ je v adresáři app/
		}
	}
}

Jak přesně chování nakonfigurovat se dozvíte v dokumentaci Composeru.

Volání příkazů

Přes Composer lze volat vlastní předpřipravené příkazy a skripty, jako by šlo o nativní příkazy Composeru. U skriptů, které se nacházejí ve složce vendor/bin, není potřeba tuto složku uvádět.

Jako příklad si definujeme v souboru composer.json skript, který pomocí Nette Testeru spustí testy:

{
	"scripts": {
		"tester": "tester tests -s"
	}
}

Testy pak spustíme pomocí composer tester. Příkaz můžeme zavolat i v případě, že nejsme v kořenové složce projektu, ale v některém podadresáři.

Konfigurace

Composer je úzce propojený s verzovacím nástrojem Git. Pokud jej nemáte nainstalovaný, je třeba Composeru říct, aby jej nepoužíval:

composer -g config preferred-install dist
Vylepšit tuto stránku