Stejně jako při vydání verze Drupal 9 je nyní i pro Drupal 10 třeba aktualizovat kompatibilitu modulů. Dost často to může být i změna jen na jednom řádku v info.yml souboru. Jenže pokud maintainer modulu nevydá novou verzi, pomocí composeru modul nelze nainstalovat. A případné patche se aplikují až po instalaci, která ale neproběhne.
To nám právě umožní nástroj composer-drupal-lenient, který v zásadě změní obsah info.yml s definicí podporovaného jádra na ^8 || ^9 || ^10. Změna proběhne jen pro instalaci pomocí composer, reálně v soboru na disku bude původní hodnota, např. ^8 || ^9.
Instalace module trim nepodporované verze
https://www.drupal.org/project/trim
Máme modul trim, který je kompatibilní jen s verzí Drupal 8 a Drupal 9.
Instalace v Drupal 10 neproběhne:
composer require 'drupal/trim:^1.0'
Ale již existuje patch, který to řeší "Automated Drupal 10 compatibility fixes" https://www.drupal.org/project/trim/issues/3290139
Je opravdu jednoduchý
-core: 8.x
-core_version_requirement: ^8 || ^9
+core_version_requirement: ^8 || ^9 || ^10
Ale jak ho automaticky nainstalovat?
1) Instalace composer-drupal-lenient
https://github.com/mglaman/composer-drupal-lenient
Instalace není nic složitého. Nainstalujeme balíček
composer require mglaman/composer-drupal-lenient
a potom pomocí jednoduchého příkazu
composer config --merge --json extra.drupal-lenient.allowed-list '["drupal/trim"]'
si upravíme composer.json. Takže během dalšího pokusu se přechodně nahradí core_version_requirement a modul se tak úspěšně stáhne.
Tím ale naše práce nekončí, protože modul (soubory) máme sice stažený, ale s původním obsahem souboru trim.info.yml
2) Instalace composer-patches
https://github.com/cweagans/composer-patches
Tento balíček nám umožní automaticky aplikovat vybrané patche pro naše moduly. Instalace opět není složitá:
composer require cweagans/composer-patches
Pak je třeba si příslušně upravit composer.json, přidat si tam sekci patches se jménem modulu a cestou k patch souboru.
Jak to ale, že instalace opět skončí neúspěchem?
Je to dané tím, že patche se vytvářejí vždy na poslední vývojovou verzi. Takže tu si musíme nainstalovat.
composer require 'drupal/trim:1.x-dev@dev'
Vše se již zdárně stáhlo a automaticky opatchovalo, zbývá už jen modul povolit.
Závěrem
Možná to napoprvé vypadá složitě, ale v zásadě po instalaci composer-drupal-lenient a composer-patches máme hotovo. Pokud narazíme na modul, který ještě nemá Drupal 10 verzi, ale již existuje patch, který potřebnou kompatibilitu přináší, stačí si ho dát na seznam composer-drupal-lenient a definovat příslušný patch. O zbytek se composer postará sám.