Drupal 8 installeren met composer

Om Drupal met composer te installeren geeft de Drupal website drie mogelijkheden [link 1]. Op basis van het aantal vinkjes in de daar gepresenteerde vergelijkingstabel kies ik voorlopig voor de eerste optie met drupal-composer.

Maar eerst moeten we ons er van vergewissen dat composer en git zijn geïnstalleerd. Git kun je onder linux gewoon vanuit de packagemanager installeren. Onder Ubuntu dus met:

$ sudo apt-get update
$ sudo apt-get install git

Composer installeer je in een Linux omgeving bijvoorbeeld met:

$ curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer

Hiermee wordt composer in /usr/local/bin geïnstalleerd waarmee die gelijk in het zoekpad staat.

Nu kunnen we Drupal 8 met behulp van composer installeren in de map gemenegronden:

$ composer create-project drupal-composer/drupal-project:8.x-dev gemenegronden --stability dev --no-interaction

Of in twee stappen met behulp van git:

$ git clone https://github.com/drupal-composer/drupal-project.git gemenegronden 
$ composer install

Deze tweede optie geeft je de mogelijkheid om voor de installatie nog wijzigingen in composer.json aan te brengen.

Dit leidt tot de volgende mappenstructuur:

gemenegronden
--vendor
--scripts
--web
  --core
  --modules
  --sites
  --themes
  --libraries
  --profiles
--drush

De webroot zit dus in de map web dus de configuratie van de webserver moet hier op worden aangepast.

Installatie met behulp van drupal-composer zorgt er voor dat een aantal taken via composer.json worden geregeld:

  • Zoals hierboven al aangegeven wordt Drupal in de web map geplaatst.
  • Autoloader maakt gebruik van de door composer aangemaakte autoloader in vendor/autoload.php, in plaats van de door Drupal verstrekte autoloader (web/vendor/autoload.php).
  • Modules (pakketen van het type drupal-module) worden in de submap contrib geplaatst (web/modules/contrib/)
  • Thema's (pakketten van het type drupal-theme) worden geplaatst in web/themes/contrib/
  • Profiles (pakketten van het type drupal-profile) worden in web/profiles/contrib/ geplaatst
  • Schrijfbare versies van settings.php and services.yml worden aangemaakt.
  • De map web/sites/default/files wordt aangemaakt.
  • De meest recente versie van Drush wordt lokaal geïnstalleerd in vendor/bin/drush.
  • De meest recente versie van Drupal Console wordt lokaal in vendor/bin/drupal geïnstalleerd.

Installatie bijwerken en verwijderen van contrib modules

In de meeste gevallen kun je pakketten installeren met composer require [vendor]/[packagename]. Bijna alle Drupal modules en thema's worden gehost op een custom Composer repository, dat al door drupal-composer is voorgeconfigureerd. Daarmee kunnen we drupal als vendor naam gebruiken. Hiermee kunnen modules en thema's die op drupal.org worden onderhouden worden geïnstalleerd. De volgende composer commando's passen het composer.json bestand aan.

$ composer require drupal/[pakketnaam]

Wil je een speciale versie installeren dan geef je het versienummer ook mee en kun je het geheel het best in dubble quotes insluiten:

$ composer require "drupal/[pakketnaam]:[versie]"

Bijwerken van een pakket gaat dan eenvoudig met

$ composer update drupal/[pakketnaam]

en om het pakket te verwijderen

Met bovenstaande commando's wordt composer.json aangepast. De veranderingen kunnen nu met het commando composer update op het systeem worden doorgevoerd.

Bijwerken van Drupal Core

Drupal-composer probeert alle Drupal Core bestanden binnen je project up to date te houden. Dat wil zeggen alle bestanden in de web/core map. Het drupal-scaffold project [link 3] zorgt ervoor dat ook alle zogenaamde "scaffold files" worden meegenomen in de update. Scaffold files zijn de Drupal files die niet in de core map staan zoals index.php, .htaccess  en robots.txt. Handmatige aanpassing van deze bestanden kan dan leiden tot vervelende merge conflicten.

Om dit te voorkomen kun je de onderstaande git strategie volgen:

  1. Voer composer update drupal/core --with-dependencies uit om Drupal Core en haar afhankelijkheden bij te werken.
  2. Draai git diff om vast te stellen of er wijzigingen zijn in de "scaffolding files".
  3. Onderzoek de verschillen en pas ze naar behoefte aan.
  4. Commit alles in een keer, zodat web in sync blijft met core bij een check out van  branches of na een git bisect.
  5. Mochten er in stap 2 niet-triviale conflicten optreden dan kun je ze uitvoeren in een aparte branch om ze daarna met git merge te combineren met de bijgewerkte core. Dit kun je vergemakkelijken door gebruik te maken van een "three-way merge tool" als kdiff3 [link 2]. Overigens is dit alles niet nodig als de veranderingen eenvoudig zijn. Het bij elkaar zetten van de aanpassingen en ze aan het begin of het eind van het bestand plaatsen, is een goede strategie om het mergen overzichtelijk te houden.

Performance

Composer werkt een stuk trager dan Drush. Niet gek natuurlijk als je je realiseert dat composer op de achtergrond veel meer regelt. Om de performance te verbeteren kun je prestissimo installeren dat er voor zorgt dat processen parallel worden uitgevoerd.

$ composer global require hirak/prestissimo

Reactie toevoegen