Gebruik gelijktijdig verschillende composer versies
Introductie Composer 2
Het is inmiddels een half jaar geleden dat Composer 2 het levenslicht zag en eindelijk heb ik het aangedurfd om wat Drupal-projecten helemaal met composer 2 op te leveren. Iedereen die met composer werkt weet dat je na jaren ‘composer require’ gebruikt te hebben, inmiddels een tweede taal kent, een nieuw muziekinstrument kunt bespelen, of met overtuigende souplesse in de downward facing dog duikt, als ware je een volleerde yogi. Groot was dan ook keer op keer de ontreddering wanneer je na het halen van twee cappuccino’s erachter kwam dat ‘composer require’ helemaal NIETS had uitgehaald, omdat er een keiharde “Your requirements could not be resolved to an installable set of packages.”-melding op je scherm jou stond uit te lachen.
Maar dat, beste mensen, is met de komst van Composer 2 allemaal verleden tijd. Je knippert met je ogen en de packages zijn al gedownload, of je krijgt meteen een bericht dat het niet gelukt is door (nog steeds) die “installable set of packages”.
Eind goed al goed?
Nog niet helemaal. In deze fase kan het zijn dat je voor het ene project versie 1 nodig hebt, en voor het andere project versie 2. Of een nog veel specifiekere versie.
Er zijn verschillende manieren hoe je hiermee omgaat:
- Switchen tussen de projecten en telkens een `composer self-update –2` (of 1) uitvoeren.
- Aliassen aanmaken en per project besluiten of je composer1 of composer2 aanroept.
- Etc.
Maar zelf kwam ik tot de pijnlijke ontdekking dat ik in een onbewaakt ogenblik toch per ongeluk versie 2 gebruikte waar versie 1 nodig was, en ineens met rare problemen te maken kreeg, waar bovendien geen touw aan vast te knopen was, en die waarschijnlijk iets te maken hadden met de grote mysterieuze composer cache! (Men zou eens moeten onderzoeken wat je daar allemaal tegen kunt komen vandaag de dag… maar dat gaat helaas buiten de scope van deze blog).
Automatiseren
Afijn, om deze rampspoed te voorkomen moest ik ineens denken aan een paar regels hele slimme, simpele code die door een oud-collega in een ver verleden waren bedacht, in de tijd dat we ditzelfde probleem met drush hadden en je per project van gekkigheid niet meer wist wat je kon doen om niet telkens te hoeven nadenken welke drush-versie je nodig had. Want nadenken is voor mietjes, en je bent nou eenmaal programmeur geworden om niet te veel te hoeven na te denken en vooral te automatiseren.
Het komt in het kort op het volgende neer:
- Maak zoveel composer-versies aan als je wilt (downloaden kan via https://getcomposer.org/download/)
- Per specifieke versie doe je dan bijvoorbeeld `mv composer.phar /usr/local/bin/composer1`
- Maak nu een bash-script aan met daarin de volgende code:

- Uiteraard is dit een voorbeeld ter inspiratie.
- Zet dit bash-script neer waar je wilt maar zorg dat het script executable is, bijvoorbeeld:
`ln -s ~/Scripts/composer.sh /usr/local/bin/composer`
- Ga nu naar de root van je websiteproject (waar ook de .git folder in staat).
`cd /var/www/my-project`
- Zet je gewenste composer versie in .git/config
`git config composer.version 11015`
- Test of dit werkt:
`composer --version`
Dit zou de zojuist ingevoerde versie moeten tonen (1.10.15).
Tadaa! Vanaf nu wordt het leven veel beter. En nog een prettige bijkomstigheid is dat je eindelijk die koffieverslaving kunt gaan aanpakken ;)