Menu
Szybki wybór
Hosting Domeny VPS SSL Kalkulator Porównania FAQ
Aktywne kody
Wszystkie kody rabatowe

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 z composer.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. Aktualizuje composer.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