Nu om dage kommer man ikke langt i et projekt, før man begynder at installere tredieparts pakker. Der er jo ingen grund til at genopfinde den dybe tallerken, hvis andre allerede har lavet en i god kvalitet, der bare virker. Her kommer Composer ind i billedet. Den holder styr på de pakker du har installeret og som dit projekt dermed er afhængig af.
Når du installerer noget med Composer, smider den pakkenavn og version i composer.json, og når du så skal installere dit projekt et andet sted, eller dele det med andre, kan en simpel install
commando hente alle projektets afhængigheder. Smart.
Indholdsfortegnelse
Installer Composer…
…på FreeBSD:
1 |
# pkg install php-composer |
…på Ubuntu <15.10
1 2 |
# apt-get install curl php5-cli git # curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer |
…på Ubuntu >=15.10
1 |
# apt-get install composer |
Installer eksisterende og nye pakker
Hvis du har et projekt med en composer.json fil, kan du nu blot hente alle afhængigheder til projektet med denne kommando:
1 |
composer install |
Composer opretter en mappe der hedder vendor
, og heri lægges alle de php pakker som hentes. Mappen placeres det sted du befinder dig, når du udfører install kommandoen.
Hvis du selv starter et projekt, kan du blot begynde at hente de værktøjer du skal bruge med composer:
1 |
composer require pubnub/pubnub |
Ovenstående kommando henter og tilføjer projektet til composer.json
Du kan også installere en bestemt version af en pakke:
1 |
composer require pubnub/pubnub ~3.8 |
Bemærk at du nu har to konfigurationsfiler: composer.json
og composer.lock
. Læs mere om disse sidst på denne side.
Opdatering af pakker
For at opdatere til nyere versioner af 3. parts afhængigheder, benyttes update
. Denne kommando ignorerer composer.lock
filen og opdaterer i hendhold til semver i composer.json
.
1 |
composer update |
Kommandoen sørger også for at opdatere composer.lock
med de ny versioner. Læs mere om dette under “Subversion og composer”
Du kan også nøjes med at opdatere en eller flere pakker, uden at opdatere alle:
1 |
composer update pubnub/pubnub |
Subversion og composer
Composer danner (udover vendor
mappen) to filer som begge skal commit’es til subversion:
composer.json
Dette er konfigurationsfilen til composer der definerer din applikations afhængigheder. Når du tilføjer en ny afhængighed, dvs. installerer en ny pakke med composer, vil information om den nye pakke automatisk registreres her. Når du opdaterer pakker med composer update
får du de nyeste versioner af pakkerne iht. til specifikationerne i denne fil.
composer.lock
Formålet med denne fil, er at registrere nøjagtig hvilke versioner der er installeret, således at afhængigheder kan gendannes fuldstændig magen til.
I dit udviklingsmiljø kan du opdatere til nyere versioner og tjekke at alt fungerer. Bagefter kan du i dit produktionsmiljø opdaterer disse 2 filer fra subversion og herefter installere nøjagtig de samme versioner.
Første gang du laver en checkout til dit udviklingsmiljø:
1 |
composer install |
… og når du herefter ønsker nyere versioner
1 |
composer update |
Udfør de nødvendige tests, og så…
1 |
svn commit composer.json composer.lock -m "New versions of composer config files" |
I dit produktionsmiljø:
1 2 |
svn update composer install |
Nu har du nøjagtig de samme versioner i produktion, som du har i dit udviklingsmiljø. Kommandoen vil endda nedgradere dine pakker, hvis de skulle være for nye i forhold til .lock filen. Og ja, du skal altid bruge composer install
i dit produktionsmiljø, også når du opdaterer.
Hvor er autoload.php?
Jeg har lige installeret phpseclib med Composer, men kunne ikke få den til at virke. Det viser sig at phpseclib benytter Composers egen autoloader som burde befinde sig i vendor
mappen. Men den fil mangler jeg tilsyneladende. Efter lidt Googlen rundt, fandt jeg frem til denne kommando der genererer en autoload.php for dig:
1 |
composer dump-autoload |