Jak nainstalovat modul, který nesplňuje minimální požadavky pro instalaci, ale již existuje patch, který to řeší?

Stále existuje dost modulů, které nemají verzi pro Drupal 10. Přitom již často existuje jednoduchý automatický patch vytvořený pomocí nástroje rector. Pomocí dvou nástrojů - mglaman/composer-drupal-lenient a cweagans/composer-patches to lze elegantně vyřešit.

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.

33trim module releases

Instalace v Drupal 10 neproběhne:

composer require 'drupal/trim:^1.0'

33trim composer install problem

 

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.

33trim composer install

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

33trim not compatible

 

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.

33trim composer patch

Jak to ale, že instalace opět skončí neúspěchem?

33cant apply patch

 

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'

33all done

 

Vše se již zdárně stáhlo a automaticky opatchovalo, zbývá už jen modul povolit.

33trim not compatible


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.