Een composer.json-bestand toevoegen
Bij de ontwikkeling van aangepaste modules zijn er verschillende scenario’s waarin de ontwikkelaar een composer.json-bestand moet toevoegen aan zijn module. Sommige van deze scenario’s hangen ervan af of de aangepaste module bedoeld is om gedeeld te worden met de community als een project op drupal.org.
Als de moduleontwikkelaar een PHP-bibliotheek van packagist.org wil gebruiken, moet hij een composer.json-bestand aan zijn project toevoegen.
Als de module een project is dat op drupal.org wordt aangeboden, afhankelijkheden heeft van andere modules en wijzigingen in deze afhankelijkheden wil testen met behulp van DrupalCI als onderdeel van de ontwikkeling, dan moet er een composer.json aanwezig zijn die deze afhankelijkheden van de Drupal-module uitdrukt. (DrupalCI kan alleen wijzigingen in afhankelijkheden detecteren in patches binnen composer.json, niet in .info- of .info.yml-bestanden.)
Als de moduleontwikkelaar gebruik wil maken van de meer expressieve beperkingen die composer.json biedt, zoals caret- of tilde-operators, zijn die alleen mogelijk in composer.json. (Hoewel Drupal zelf niet door deze beperkingen wordt afgedwongen, worden ze wel toegepast tijdens de build als de eindgebruiker Composer gebruikt om zijn site te bouwen.)
Als de module geen afhankelijkheden heeft, of alleen afhankelijk is van andere Drupal-modules, dan is composer.json niet vereist. Maar het hebben van een composer.json heeft ook geen negatieve impact.
Ongeacht of de ontwikkelaar een composer.json-bestand heeft, moeten de afhankelijkheden van hun Drupal-module nog steeds worden uitgedrukt in hun .info.yml-bestanden, zodat Drupal kan garanderen dat de juiste modules ingeschakeld zijn.
Definieer je module als een PHP-pakket
De bredere PHP-community gebruikt Composer voor pakketbeheer; dit wordt ook in Drupal toegepast. Zo is het Drupal-project afhankelijk van het pakket «drupal/core». Het pakkettype van «drupal/core» is gedefinieerd als «drupal-core», zodat Composer weet wat ermee te doen. De bibliotheek composer/installers definieert verschillende Drupal-typen. Deze zijn:
- drupal-module
- drupal-theme
- drupal-library
- drupal-profile
- drupal-drush
Hier is een volledig voorbeeld van hoe het project mobile_detect composer.json gebruikt om afhankelijk te zijn van een extern project mobiledetect/mobiledetectlib:
{ "name": "drupal/mobile_detect", "description": "Mobile_Detect is a lightweight PHP class for detecting mobile devices.", "type": "drupal-module", "homepage": "https://drupal.org/project/mobile_detect", "authors": [ { "name": "Matthew Donadio (mpdonadio)", "homepage": "https://www.drupal.org/u/mpdonadio", "role": "Maintainer" }, { "name": "Darryl Norris (darol100)", "email": "admin@darrylnorris.com", "homepage": "https://www.drupal.org/u/darol100", "role": "Co-maintainer" } ], "support": { "issues": "https://drupal.org/project/issues/mobile_detect", "irc": "irc://irc.freenode.org/drupal-contribute", "source": "https://cgit.drupalcode.org/mobile_detect" }, "license": "GPL-2.0-or-later", "minimum-stability": "dev", "require": { "mobiledetect/mobiledetectlib": "~2.8" } }
Voor de naamgeving van je pakket moet je de Drupal Composer naamgevingsconventies volgen.
Afhankelijkheden definiëren in composer.json
Indien gewenst kun je externe afhankelijkheden voor je module definiëren in composer.json. De Drupal core detecteert of beheert deze afhankelijkheden niet automatisch. Om de afhankelijkheden te gebruiken die in het composer.json-bestand van je project zijn gedefinieerd, moet je een van de volgende onderhoudsstrategieën toepassen:
- Installeer Drupal core en de module met Composer.
- Wijzig handmatig het composer.json-bestand in de hoofdmap van je Drupal-installatie.
Voor meer informatie over Composer als afhankelijkheidsbeheerder voor Drupal, bekijk de vergelijking van Composer en Drush Make als dependency managers.
Afhankelijkheden toevoegen van andere Drupal-modules
Standaard kijkt Composer alleen naar pakketten die zijn gepubliceerd op Packagist bij het oplossen van afhankelijkheden. De meeste Drupal-modules worden daar niet gepubliceerd, omdat Drupal zijn eigen repository heeft. Hierdoor kun je foutmeldingen krijgen zoals:
Het gevraagde pakket drupal/module is in geen enkele versie gevonden, mogelijk zit er een typefout in de pakketnaam.
Je kunt Composer instrueren om naar Drupal-modules te zoeken in de repository packages.drupal.org door het uitvoeren van het volgende commando:
$ composer config repositories.drupal composer https://packages.drupal.org/8
Dit commando voegt de volgende sectie toe aan je composer.json-bestand:
"repositories": { "drupal": { "type": "composer", "url": "https://packages.drupal.org/8" } }
Compatibiliteit met Drupal 9
Een composer.json-bestand is niet vereist voor compatibiliteit met Drupal 9. Drupal 9 is compatibel met een info.yml-bestand. Als je project een composer.json-bestand bevat, is compatibiliteit met een versie van drupal/core ook niet verplicht voor compatibiliteit met Drupal 9. Als je echter een vereiste voor de versie van drupal/core in je require-sectie hebt, dan moet die compatibel zijn met Drupal 9.