keyboard_arrow_up

Ajouter une librairie dans Drupal 8 avec Composer : un exemple avec Chosen

Rédigé par Sylvain Lavielle
Développeur web freelance expert Drupal sur Toulouse

Le 06/09/2019

Pour continuer ma petite série du moment sur Composer, voici un 3eme article sur le sujet. Cet article présente un exemple d'un cas basé sur Drupal 8, mais il peut également être transposé pour d'autres technologies PHP utilisant Composer.

Le problème

Lorsqu'on utilise certains modules Drupal 8, il arrive que ceux-ci utilisent des librairies qu'il faut récupérer et installer dans le répertoire des librairies Drupal. Ces librairies peuvent être des librairies PHP ou des librairies front-end utilisant du javascript et des feuilles de styles et des assets.

Ces librairies peuvent ne pas être référencées sous packagist.org et/ou ne pas être déclarées en tant que dépendances Composer du module. Elles ne seront alors naturellement pas installées par Composer lors qu'on effectue un "composer require" jour ajouter le module .

C'est par exemple le cas du module Drupal Chosen. C'est un module dont la principale fonction est d'encapsuler le plugin jQuery Chosen afin de la rendre utilisable dans un contexte Drupal. Ce module exploite donc le plugin Chosen, mais il ne le fournit pas lui-même.

Que faire alors ? installer cette librairie manuellement n'a pas vraiment de sens (on utilise justement Composer pour ne plus avoir à faire ça) et utiliser la commande "drush chosenplugin" comme suggéré par la documentation du module Chosen n'est guère plus intéressant : Il faut penser à notre déploiement continu et à ce que ce choix va impliquer à ce niveau !

Fort heureusement, il existe une solution simple avec Composer.

La solution

Elle consiste à déclarer le repository contenant le plugin jQuery Chosen directement dans Composer pour que celui-ci puisse être installé. Voici les différentes étapes de l'installation du module Chosen. Pour information, mon projet Drupal est basé sur une installation réalisée avec drupal-composer du groupe de travail drupal-composer.org.

Dans un premier temps, nous allons ajouter notre module de manière classique :

$ composer require drupal/chosen

Suite à cette première manipulation, le fichier composer.json contiendra la dépendance dans la section "require" :

"require": {
    "drupal/chosen": "^2.6",
}

Il va ensuite nous falloir déclarer le plugin Chosen jQuery dans la section "repositories" :

"repositories": [
    {
        "type": "package",
        "package": {
            "name": "harvesthq/chosen",
            "version": "1.8.4",
            "type": "drupal-library",
            "dist": {
                "url": "https://github.com/harvesthq/chosen/releases/download/v1.8.4/chosen_v1.8.4.zip",
                "type": "zip"
            },
            "require": {
                "composer/installers": "^1.2.0"
            }
        }
    },
],

Puis ajouter la référence de ce nouveau package dans la section "require" :

"require": {
    "drupal/chosen": "^2.6",
    "harvesthq/chosen": "^1.8",
}

Enfin, pour que la modification soit prise en compte, il nous faudra exécuter la commande :

$composer install

Une fois la commande exécutée, le plugin chosen aura été récupéré et installé dans le répertoire "libraries" de Drupal

 

Sujets abordés dans cet article