Composer, mises à jour et patchs

Écrit le 02/05/2023
  1. Qu’est ce que composer ?

Composer est un outil de gestion de dépendances de librairies permettant d’installer et de les mettre à jour, c’est aujourd’hui un des outils majeurs des développements en PHP. Les packages sont téléchargés sur Packagist, repository pour packages PHP.

Composer est découpé en deux fichiers composer.json et composer.lock :

  • composer.json :
  • composer.lock :

Le fichier composer.json est composé de la liste des packages requis et leurs contraintes de versions : 

Récupéré du site de composer, la littérature des contraintes :

Le fichier composer.lock contient tiens lui tous les packages récupérés et leur dépendance et la version précise récupérée :

  1. Utilisation de composer

Les principales commandes utilisées avec composer sont install, require, remove, update.

composer install

Cette commande permet le téléchargement des packages définis dans les fichiers composer.json et composer.lock.

composer require

Cette commande permet l’ajout d’un package dans les fichiers composer et son téléchargement.

composer remove

Cette commande permet la suppression d’un package dans les fichiers composer et sa suppression locale.

composer update

Cette commande permet la mise à jour des packages définis dans le fichier composer.json dans la limite haute de récupération, défini par la syntaxe associée au package.

Composer est un outil qui nous permet via grâce à ces deux fichiers de tracer et figer l’état des dépendances liés à un projet à un instant donné. Les développeurs d’un même projet peuvent alors travailler sur les mêmes versions des librairies externes liées au projet, par la simple commande composer install. Le package est également en constante évolution concernant la vitesse de téléchargement de ces packages et est aujourd’hui de plus en plus performant, notamment avec l’arrivée Composer 2.

  1. Mises à jour Drupal (core / modules)

Composer permet également des montées de versions de ces dépendances très facile, que ce soit sur nos projets Symfony ou Drupal.

Avant de monter de version un module ou une dépendance il est important de bien vérifier les implications de ces montées de version, chaque release contient des notes comprenant d’éventuelles informations importantes à noter.

Une fois ces vérifications faites, il suffit d’utiliser la commande composer update -W si la contrainte est bien écrite dans le composer, autrement il faut la modifier ou utiliser composer require -W avec la version cherchée. Le “-W” permet d’aller chercher et mettre à jour les dépendances de la librairie récupérée.

composer update -W
composer require drupal/codesnippet -W

Pour la montée de version du core de Drupal, le principe reste le même, on vérifie premièrement les notes de releases, les potentielles actions à effectuer lors de la montée de version :

Puis on mets à jour les packages drupal/core :

composer update "drupal/core-*" -W

La documentation Drupal apporte les différentes variations et possibilités lors d’une montée de version : https://www.drupal.org/docs/updating-drupal/updating-drupal-core-via-composer.

  1. Gestion et utilisation de patchs

Il arrive que nous ayons besoin de patcher / altérer une librairie existante, par exemple lorsqu’un module Drupal ne correspond pas exactement à la fonctionnalité que l’on cherche, on peut alors patcher le module pour altérer le code de la dépendance.

Un patch est un fichier .diff permettant d’effectuer des modifications de code sur un ou plusieurs fichiers :

Pour utiliser un patch, il faut d’abord récupérer le package cweagans/composer-patches :

composer require cweagans/composer-patches

Il faut ensuite écrire dans le fichier composer.json les patchs utilisés de la façon suivante :

"extra": {
     "patches": {
           "drupal/codesnippet": {   
           		"mon_patch":"patches/mon_patch.patch"		
           }
	}
}

Après un composer install, on peut observer la récupération et application du patch. Attention, un patch est associé à une version spécifique d’une librairie et donc sera refusé en cas de décalage entre .

Pour créer son propre patch, il faut cloner via git la version de la librairie que l’on souhaite patcher. Appliquer les modifications souhaitées puis soit en ligne de commande, soit via PHPStorm, créer le fichier .patch. Le patch s’utilise ensuite avec la manière décrite précédemment.