Composer til dine php projekter

(Last Updated On: 19. november 2020)

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.

Installer Composer…

…på FreeBSD:

…på Ubuntu <15.10

…på Ubuntu >=15.10

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:

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:

Ovenstående kommando henter og tilføjer projektet til composer.json

Du kan også installere en bestemt version af en pakke:

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.

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:

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ø:

… og når du herefter ønsker nyere versioner

Udfør de nødvendige tests, og så…

I dit produktionsmiljø:

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: