Composer — menedżer pakietów PHP

🎯 Po tej lekcji zainstalujesz Composera, zainicjujesz projekt przez composer init i dodasz pierwszą zależność przez composer require.

Wyobraź sobie, że budujesz aplikację PHP i potrzebujesz biblioteki do wysyłania e-maili, obsługi dat albo logowania zdarzeń. Bez Composera musiałbyś ręcznie pobierać pliki, kopiować je do projektu i samodzielnie śledzić aktualizacje. Composer rozwiązuje ten problem — to menedżer pakietów PHP, który działa jak lista zakupów zależności.

Definiujesz, czego potrzebujesz w pliku composer.json, a Composer pobiera wszystko automatycznie, razem z zależnościami zależności (tak zwanymi transitive dependencies).

Instalacja Composera

macOS i Linux

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
sudo mv composer.phar /usr/local/bin/composer

Na macOS możesz też użyć Homebrew:

brew install composer

Windows

Pobierz instalator ze strony getcomposer.org i uruchom go. Instalator doda composer do zmiennej środowiskowej PATH.

Sprawdź instalację

composer --version

Powinieneś zobaczyć coś w stylu:

Composer version 2.x.x ...
💡 Composer 2: Upewnij się, że używasz Composera w wersji 2 (nie 1). Wersja 2 jest znacznie szybsza i to ona jest obecnie standardem w branży.

Inicjalizacja projektu — composer init

W katalogu nowego projektu uruchom kreator:

composer init

Kreator zapyta o nazwę pakietu (np. twoja-firma/projekt), opis, autora i minimalną wersję PHP. Możesz nacisnąć Enter przy każdym pytaniu, żeby przyjąć wartości domyślne. Na końcu powstanie plik composer.json.

Struktura composer.json

{
    "name": "twoja-firma/projekt",
    "description": "Mój projekt PHP",
    "type": "project",
    "require": {
        "php": ">=8.1"
    },
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    }
}

Najważniejsze sekcje:

| Sekcja | Opis | |---|---| | require | Pakiety potrzebne do działania aplikacji | | require-dev | Pakiety tylko dla programistów (testy, narzędzia) | | autoload | Konfiguracja autoloadera (więcej w następnej lekcji) | | autoload-dev | Autoloading tylko dla środowiska deweloperskiego |

composer require — dodaj zależność

composer require monolog/monolog

Ta jedna komenda:

  1. Szuka pakietu monolog/monolog na Packagist.
  2. Pobiera go i wszystkie jego zależności.
  3. Zapisuje odpis wersji w composer.json i composer.lock.
  4. Kopiuje kod do katalogu vendor/.

Packagist — rejestr pakietów PHP

Packagist.org to domyślne repozytorium, z którego Composer pobiera pakiety. Możesz tam wyszukać biblioteki, zobaczyć ich dokumentację, licencję i statystyki pobierania.

Każdy pakiet ma nazwę w formacie vendor/pakiet, np.:

  • monolog/monolog — popularna biblioteka do logowania
  • vlucas/phpdotenv — wczytywanie zmiennych środowiskowych z pliku .env
  • phpunit/phpunit — framework do testów jednostkowych
⚠️ Sprawdzaj pakiety przed instalacją: Zanim dodasz pakiet do projektu, rzuć okiem na liczbę pobrań, ostatnią aktualizację i licencję. Pakiet nieaktualizowany od kilku lat może nie wspierać nowych wersji PHP.

Katalog vendor/ i pliki blokady

Po composer require zobaczysz nowy katalog vendor/ z pobranym kodem oraz plik composer.lock. Ten drugi zapisuje dokładne wersje wszystkich zainstalowanych pakietów — łącznie z zależnościami zależności.

💡 composer.lock w Git: Plik composer.lock powinien być zacommitowany do repozytorium. Dzięki temu każdy developer i serwer produkcyjny zainstaluje dokładnie te same wersje. Katalog vendor/ natomiast trafia do .gitignore — jest generowany automatycznie przez composer install.

Podsumowanie przepływu pracy

packagist.org ──> composer require ──> composer.json + composer.lock
                                              │
                                              ▼
                                         vendor/
                                              │
                                              ▼
                              require 'vendor/autoload.php';

W kolejnej lekcji zobaczysz, jak skonfigurować autoloading PSR-4, żeby Composer automatycznie wczytywał Twoje klasy — bez ani jednej linii require.

Sprawdź się

Co robi komenda `composer require vendor/pakiet`?

Czym jest Packagist?

Jaka jest różnica między `composer install` a `composer update`?

Ćwiczenie

Utwórz nowy katalog projekt-composer/, wejdź do niego i uruchom composer init (odpowiedz na pytania kreatora lub naciśnij Enter, żeby przyjąć wartości domyślne). Następnie sprawdź zawartość wygenerowanego composer.json. Opcjonalnie: wyszukaj na packagist.org dowolny pakiet i zanotuj jego nazwę w formacie vendor/pakiet.

Pokaż rozwiązanie
mkdir projekt-composer && cd projekt-composer
composer init
# Kreator zapyta o nazwę pakietu, opis, autora itp.
# Możesz przejść przez wszystkie pytania Enterem.
# Wynik: plik composer.json w bieżącym katalogu.
cat composer.json