Composer — zarządzanie pakietami PHP
Czym jest Composer?
Composer to menadżer zależności dla PHP — odpowiednik npm dla Node.js lub pip dla Pythona. Pozwala deklarować zależności projektu (biblioteki, frameworki), automatycznie je pobierać z Packagist i generować autoloader PSR-4 dla klas PHP.
Powiązane tematy: PHP OPcache, PHP-FPM konfiguracja, Laravel na hostingu oraz Git deploy na hosting. Do wyboru hostingu z PHP 8.x użyj kalkulatora kosztów.
Instalacja Composera
# Linux/macOS — instalacja globalna
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
sudo mv composer.phar /usr/local/bin/composer
php -r "unlink('composer-setup.php');"
# Sprawdź wersję
composer --version
# Windows — pobierz Composer-Setup.exe z getcomposer.org # Instalacja na serwerze hostingowym (bez sudo)
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php --install-dir=~/bin --filename=composer
# Dodaj ~/bin do PATH w ~/.bashrc
export PATH="$HOME/bin:$PATH" composer.json — struktura projektu
{
"name": "firma/moj-projekt",
"description": "Opis projektu",
"type": "project",
"require": {
"php": "^8.1",
"monolog/monolog": "^3.0",
"guzzlehttp/guzzle": "^7.5"
},
"require-dev": {
"phpunit/phpunit": "^10.0",
"phpstan/phpstan": "^1.10"
},
"autoload": {
"psr-4": {
"App\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"minimum-stability": "stable",
"prefer-stable": true
} Podstawowe komendy
| Komenda | Co robi | Kiedy używać |
|---|---|---|
composer install | Instaluje zależności z composer.lock | Deploy, nowy developer — zawsze z lock file |
composer update | Aktualizuje zależności do najnowszych w ramach constraintów | Lokalnie, świadomie — aktualizuje composer.lock |
composer require vendor/pakiet | Dodaje nową zależność | Dodawanie biblioteki do projektu |
composer remove vendor/pakiet | Usuwa zależność | Usuwanie nieużywanej biblioteki |
composer dump-autoload | Regeneruje autoloader | Po dodaniu nowych klas bez Composera |
composer show | Lista zainstalowanych pakietów | Audyt zależności |
composer outdated | Pakiety z nowszymi wersjami | Planowanie aktualizacji |
composer audit | Sprawdza znane podatności CVE | Security check przed deploy |
Semantic Versioning — jak określać wersje
Composer używa SemVer (MAJOR.MINOR.PATCH) z operatorami constraintów:
| Constraint | Znaczenie | Przykład |
|---|---|---|
^3.0 | Compatible release (>=3.0, <4.0) | Bezpieczne dla większości bibliotek |
~3.2 | Reasonably close (>=3.2, <4.0) | Podobne do ^, ale starszy zapis |
3.2.* | Dokładna wersja minor (>=3.2, <3.3) | Dla stabilnych API |
>=3.0 <4.0 | Zakres jawny | Gdy ^ nie wystarczy |
3.2.1 | Dokładna wersja | Unikaj — blokuje aktualizacje bezpieczeństwa |
Autoloading PSR-4
Po zdefiniowaniu mapowania w composer.json, plik vendor/autoload.php
automatycznie ładuje klasy:
<?php
require_once __DIR__ . '/vendor/autoload.php';
// Klasa App\Services\MailService
// Plik: src/Services/MailService.php
$mailer = new App\Services\MailService(); Struktura katalogów dla mapowania "App\\": "src/":
projekt/
├── src/
│ ├── Services/
│ │ └── MailService.php # namespace App\Services;
│ ├── Models/
│ │ └── User.php # namespace App\Models;
│ └── Controllers/
│ └── HomeController.php # namespace App\Controllers;
├── vendor/
├── composer.json
└── composer.lock install vs update — kluczowa różnica
ZASADA: na serwerze produkcyjnym zawsze używaj composer install, nigdy
composer update.
-
composer install— instaluje DOKŁADNIE wersje zcomposer.lock. Gwarantuje reproducible build — na każdym serwerze te same wersje. -
composer update— rozwiązuje zależności od nowa, może pobrać nowsze wersje. Aktualizujecomposer.lock. Ryzyko: nowa wersja może złamać coś w produkcji.
# Na produkcji zawsze:
composer install --no-dev --optimize-autoloader
# --no-dev: pomija pakiety require-dev (phpunit, phpstan itp.)
# --optimize-autoloader: generuje classmap zamiast PSR-4 scan — szybsze Przydatne opcje dla deploymentu
# Produkcja — bez devdeps, zoptymalizowany autoloader
composer install --no-dev --optimize-autoloader --no-interaction
# Sprawdź przed instalacją (dry run)
composer install --dry-run
# Bez pobierania plików (tylko sprawdzenie)
composer validate
# Wyczyść cache Composera (gdy problemy z pobieraniem)
composer clear-cache Prywatne repozytoria i Packagist
# composer.json — prywatne repo VCS (GitHub/GitLab)
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/firma/prywatne-repo"
}
],
"require": {
"firma/prywatne-repo": "^1.0"
}
} # Autentykacja — zapisz token GitHub
composer config --global github-oauth.github.com TOKEN
# Lub przez zmienną środowiskową
COMPOSER_AUTH='{"github-oauth":{"github.com":"TOKEN"}}' composer install