Sfaturi pentru utilizarea Composer
Composer este un instrument pentru gestionarea dependențelor în PHP. Vă permite să declarați bibliotecile de care depinde proiectul dumneavoastră, iar acesta le va instala și actualiza pentru dumneavoastră. Vom învăța:
- cum să instalăm Composer
- cum să-l folosim într-un proiect nou sau existent
Instalare
Composer este un fișier executabil .phar
pe care îl descărcați și îl instalați după cum urmează.
Windows
Utilizați programul de instalare oficial Composer-Setup.exe.
Linux, macOS
Aveți nevoie doar de 4 comenzi, pe care le puteți copia de pe această pagină.
Mai mult, prin copierea în folderul care se află în sistemul PATH
, Composer devine accesibil la nivel
global:
$ mv ./composer.phar ~/bin/composer # or /usr/local/bin/composer
Utilizare în proiect
Pentru a începe să utilizați Composer în proiectul dumneavoastră, tot ce aveți nevoie este un fișier
composer.json
. Acest fișier descrie dependențele proiectului dumneavoastră și poate conține și alte metadate.
Cel mai simplu composer.json
poate arăta astfel:
{
"require": {
"nette/database": "^3.0"
}
}
Spunem aici că aplicația noastră (sau biblioteca) depinde de pachetul nette/database
(numele pachetului este
format din numele furnizorului și numele proiectului) și că dorește versiunea care corespunde constrângerii de versiune
^3.0
.
Astfel, atunci când avem fișierul composer.json
în rădăcina proiectului și executăm:
composer update
Composer va descărca baza de date Nette în directorul vendor
. De asemenea, creează un fișier
composer.lock
, care conține informații despre versiunile exacte ale bibliotecilor pe care le-a instalat.
Composer generează un fișier vendor/autoload.php
. Puteți include pur și simplu acest fișier și puteți
începe să utilizați clasele pe care aceste biblioteci le furnizează fără nicio muncă suplimentară:
require __DIR__ . '/vendor/autoload.php';
$db = new Nette\Database\Connection('sqlite::memory:');
Actualizarea pachetelor la cele mai recente versiuni
Pentru a actualiza toate pachetele utilizate la cea mai recentă versiune în conformitate cu constrângerile de versiune
definite în composer.json
, utilizați comanda composer update
. De exemplu, pentru dependența
"nette/database": "^3.0"
, se va instala cea mai recentă versiune 3.x.x, dar nu și versiunea 4.
Pentru a actualiza constrângerile de versiune din fișierul composer.json
la, de exemplu,
"nette/database": "^4.1"
, pentru a permite instalarea celei mai recente versiuni, utilizați comanda
composer require nette/database
.
Pentru a actualiza toate pachetele Nette utilizate, ar fi necesar să le enumerați pe toate în linia de comandă, de ex:
composer require nette/application nette/forms latte/latte tracy/tracy ...
Ceea ce nu este practic. Prin urmare, utilizați un script simplu Composer Frontline care va face acest lucru pentru dumneavoastră:
php composer-frontline.php
Crearea unui nou proiect
Un nou proiect Nette poate fi creat prin executarea unei comenzi simple:
composer create-project nette/web-project name-of-the-project
În loc de name-of-the-project
trebuie să furnizați numele directorului pentru proiectul dumneavoastră și să
executați comanda. Composer va prelua depozitul nette/web-project
de pe GitHub, care conține deja fișierul
composer.json
, și imediat după aceea va instala chiar Nette Framework. Singurul lucru care rămâne este să verificați permisiunile de scriere pe
directoarele temp/
și log/
și sunteți gata de plecare.
Dacă știți pe ce versiune de PHP va fi găzduit proiectul, nu uitați să o configurați.
Versiunea PHP
Composer instalează întotdeauna versiunile de pachete care sunt compatibile cu versiunea de PHP pe care o folosiți în
prezent (sau, mai degrabă, versiunea de PHP utilizată în linia de comandă atunci când executați Composer). Care, probabil,
nu este aceeași versiune pe care o folosește gazda dvs. web. De aceea, este foarte important să adăugați informații despre
versiunea PHP de pe gazda dumneavoastră în fișierul composer.json
. După aceea, vor fi instalate numai versiunile
de pachete compatibile cu gazda.
De exemplu, pentru a seta proiectul să ruleze pe PHP 8.2.3, utilizați comanda:
composer config platform.php 8.2.3
În acest fel, versiunea este scrisă în fișierul composer.json
:
{
"config": {
"platform": {
"php": "8.2.3"
}
}
}
Cu toate acestea, numărul versiunii PHP este, de asemenea, listat în altă parte în fișier, în secțiunea
require
. În timp ce primul număr specifică versiunea pentru care vor fi instalate pachetele, al doilea număr
indică versiunea pentru care este scrisă aplicația în sine. (Desigur, nu are sens ca aceste versiuni să fie diferite, așa
că dubla înscriere este o redundanță). Setați această versiune cu ajutorul comenzii:
composer require php 8.2.3 --no-update
Sau direct în fișierul composer.json
:
{
"require": {
"php": "8.2.3"
}
}
Ignorarea versiunii PHP
Pachetele specifică de obicei atât cea mai mică versiune de PHP cu care sunt compatibile, cât și cea mai mare versiune cu
care au fost testate. Dacă intenționați să utilizați o versiune chiar mai nouă de PHP, poate în scopuri de testare,
Composer va refuza să instaleze un astfel de pachet. Soluția este de a utiliza opțiunea
--ignore-platform-req=php+
, care face ca Composer să ignore limitele superioare ale versiunii PHP solicitate.
Rapoarte false
La actualizarea pachetelor sau la schimbarea numerelor de versiune, apar conflicte. Un pachet are cerințe care intră în
conflict cu un alt pachet și așa mai departe. Cu toate acestea, Composer tipărește ocazional un mesaj fals. Acesta raportează
un conflict care nu există cu adevărat. În acest caz, este util să ștergeți fișierul composer.lock
și să
încercați din nou.
Dacă mesajul de eroare persistă, atunci acesta are o intenție serioasă și trebuie să citiți din el ce trebuie să modificați și cum.
Packagist.org – Depozitul global
Packagist este principalul depozit de pachete, în care Composer încearcă să caute pachete, dacă nu i se spune altfel. De asemenea, puteți publica propriile pachete aici.
Ce se întâmplă dacă nu dorim depozitul central
Dacă avem aplicații sau biblioteci interne în cadrul companiei noastre, care nu pot fi găzduite public pe Packagist, putem crea propriile noastre depozite pentru aceste proiecte.
Mai multe despre depozite în documentația oficială.
Încărcare automată
O caracteristică cheie a Composer este că oferă încărcare automată pentru toate clasele pe care le instalează, pe care
o începeți prin includerea unui fișier vendor/autoload.php
.
Cu toate acestea, este de asemenea posibil să utilizați Composer pentru a încărca alte clase în afara dosarului
vendor
. Prima opțiune este de a lăsa Composer să scaneze dosarele și subdosarele definite, să găsească toate
clasele și să le includă în autoloader. Pentru a face acest lucru, setați autoload > classmap
în
composer.json
:
{
"autoload": {
"classmap": [
"src/", # includes the src/ folder and its subfolders
]
}
}
Ulterior, este necesar să executați comanda composer dumpautoload
cu fiecare modificare și să lăsați
tabelele de autoloading să se regenereze. Acest lucru este extrem de incomod și este mult mai bine să încredințați această
sarcină lui RobotLoader, care efectuează aceeași activitate în mod automat
în fundal și mult mai rapid.
A doua opțiune este să urmați PSR-4. Spunând simplu, este un sistem în
care spațiile de nume și numele claselor corespund structurii directoarelor și numelor de fișiere, adică
App\Core\RouterFactory
se află în fișierul /path/to/App/Core/RouterFactory.php
. Exemplu de
configurare:
{
"autoload": {
"psr-4": {
"App\\": "app/" # the App\ namespace is in the app/ directory
}
}
}
Consultați Documentația Composer pentru a afla exact cum se poate configura acest comportament.
Testarea noilor versiuni
Doriți să testați o nouă versiune de dezvoltare a unui pachet. Cum se face acest lucru? În primul rând, adăugați
această pereche de opțiuni la fișierul composer.json
, care vă va permite să instalați versiuni de dezvoltare
ale pachetelor, dar va face acest lucru numai dacă nu există o combinație de versiuni stabile care să îndeplinească
cerințele:
{
"minimum-stability": "dev",
"prefer-stable": true,
}
De asemenea, vă recomandăm să ștergeți fișierul composer.lock
, deoarece uneori Composer refuză în mod
incomprehensibil să instaleze, iar acest lucru va rezolva problema.
Să spunem că pachetul este nette/utils
și că noua versiune este 4.0. Îl instalați cu ajutorul comenzii:
composer require nette/utils:4.0.x-dev
Sau puteți instala o versiune specifică, de exemplu 4.0.0-RC2:
composer require nette/utils:4.0.0-RC2
Dacă un alt pachet depinde de bibliotecă și este blocat la o versiune mai veche (de exemplu, ^3.1
), este ideal
să actualizați pachetul pentru a funcționa cu noua versiune. Cu toate acestea, dacă doriți doar să ocoliți limitarea și
să forțați Composer să instaleze versiunea de dezvoltare și să pretindeți că este o versiune mai veche (de exemplu,
3.1.6), puteți utiliza cuvântul cheie as
:
composer require nette/utils "4.0.x-dev as 3.1.6"
Comenzi de apelare
Puteți apela propriile comenzi și scripturi personalizate prin Composer ca și cum ar fi comenzi Composer native. Scripturile
localizate în folderul vendor/bin
nu trebuie să specificați acest folder.
Ca exemplu, definim un script în fișierul composer.json
care utilizează Nette Tester pentru a rula teste:
{
"scripts": {
"tester": "tester tests -s"
}
}
Apoi executăm testele cu composer tester
. Putem apela comanda chiar dacă nu ne aflăm în folderul rădăcină
al proiectului, ci într-un subdirectoriu.
Trimiteți mulțumiri
Vă vom arăta un truc care îi va face fericiți pe autorii open source. Puteți să acordați cu ușurință o stea pe
GitHub bibliotecilor pe care le folosește proiectul dumneavoastră. Trebuie doar să instalați biblioteca
symfony/thanks
:
composer global require symfony/thanks
Și apoi rulați:
composer thanks
Încearcă!
Configurație
Composer este strâns integrat cu instrumentul de control al versiunilor Git. Dacă nu folosiți Git, este necesar să o comunicați lui Composer:
composer -g config preferred-install dist