Gérez vos projets Drupal 8 avec Composer

Gérez vos projets Drupal 8 avec Composer

21 Nov 2017 |  Drupal

Composer pour quoi faire ?

Composer est un outil écrit en PHP qui permet de gérer les dépendances de vos projets. Grâce à lui, fini le casse de tête de la gestion des versions, du téléchargement et de la mise à jour des librairies pour votre application. En Drupal 7 on utilisait essentiellement Drush et les make files pour gérer les modules d’un projet, toutefois depuis l’arrivée de Drupal 8 Composer a été massivement adopté et est devenu l’outil de gestion recommandé.

En résumé Composer est utilisé pour la gestion des modules contrib, des librairies externes, l’utilisation de dépôts privés ou encore l’application de patchs.

Pour simplifier notre vie de développeur, un template de projet pour Drupal 8 afin de gérer votre projet avec Composer a été créé. Je vous invite à jeter un oeil à la documentation pour plus d’information sur les possibilités que cela vous offre.

Voici donc une liste non exhaustive des différentes commandes et de l’utilisation que j’ai de Composer au quotidien.

Installer un nouveau projet Drupal 8 via composer

L’utilisation de Composer vous permet de télécharger Drupal 8 ainsi que toutes les dépendances associées au bon fonctionnement de l’application.

$ composer create-project drupal/drupal <mon_projet> --stability dev --no-interaction
$ cd <mon_projet>/web
$ drush site-install standard --db-url='mysql://[db_user]:[db_pass]@localhost/[db_name]' --account-name=[admin_name] --account-pass=[admin_pass]

Quelques lignes de commandes plus tard, vous disposez d’un Drupal fraîchement téléchargé et installé sur lequel vous pouvez travailler.

Une fois la récupération des sources terminée vous devriez vous retrouver avec l’organisation suivante :

├── LICENSE
├── README.md
├── composer.json
├── composer.lock
├── drush
├── phpunit.xml.dist
├── scripts
├── vendor
└── web

Notez que les sources de Drupal sont disponibles dans le répertoire Web et c’est sur ce répertoire que doit pointer votre serveur web.

Installer un nouveau module

Pour télécharger un module utilisez la commande require afin d’ajouter celui au fichier composer.json et récupérer le code source.

Dans le cas où le module spécifierait des dépendances via un fichier composer.json, Composer se chargerait alors de récupérer les packages manquants.

$ composer require drupal/commerce
$ composer require drupal/migrate

A notez que vous avez aussi la possibilité de spécifier une version particulière du module que vous souhaitez récupérer.

composer require "drupal/<modulename>:<version>"

Comme par exemple:

$ composer require "drupal/simple_fb_connect:~3.0"
$ composer require "drupal/ctools:3.0.0-alpha26"
$ composer require "drupal/token:1.x-dev"
  • Précisez ~3.x pour récupérer la dernière version stable 8.x-3.x.
  • Ajoutez une version précise 3.0.0-alpha26 pour récupérer la version 8.x-3.0-alpha26.
  • Spécifiez la version 1.x-dev pour télécharger la version de développement 8.x-1.x-dev.

Composer c’est vraiment pratique, toutefois lorsque l’on veut tester un module, on a pas toujours envie que celui-ci soit intégré au projet, on veut juste faire un test. Dans ce cas vous pouvez toujours utiliser ce bon vieux Drush pour récupérer un module. Même si ce dernier va vous avertir que vos modules sont gérés par Composer, vous pouvez lui forcer la main grâce à l’option --pm-force

$ drush dl config_devel --pm-force

Vérifiez les modules obsolètes

Comme tout projet utilisant des contribs externes il est important d’assurer un suivi régulier et de tester les nouvelles versions disponibles. La commande outdated est particulièrement utile pour voir l’état de vos packages et s’il est nécessaire de procéder à quelques mises à jours.

$ composer outdated

Je vous conseille de limiter cette commande au package que vous avez installé pour plus de lisibilité (cela éliminera les dépendances de vos packages).

$ composer outdated --direct

Mettre à jour un module ou un package

Lorsque l’on travaille sur des projets Drupal 8 conséquent, on se retrouve vite avec des dizaines de packages et autres librairies à maintenir. C’est dans ce cas là que gérer un projet avec Composer est vraiment utile. Une fois que vous avez une idée de modules à mettre à jour, il vous suffit d’une commande pour procéder à la mise à jour du code.

$ composer update

Je vous déconseille de tout mettre à jour en une seule fois. Préférez plutôt la manière incrémentale, un module à la fois en commençant par le core et ensuite les contribs. Une fois l’opération de mise à jour effectuée n’oubliez pas de mettre à jour le schéma de la base de données.

$ composer update drupal/core --with-dependencies
$ composer update drupal/<modulename> --with-dependencies
$ drush updb
$ drush cr

Supprimer un module

Supprimer un module que vous ne voulez plus est relativement simple, assurez-vous toutefois de l’avoir désinstallé avant.

$ composer remove drupal/features

Visualiser les informations d’un package

Grâce à la commande show vous pouvez visualiser tous les modules autres packages installés sur votre projet.

$ composer show

Vous pouvez aussi obtenir plus d’information sur un package en passant le nom de celui-ci en argument.

$ composer show drupal/devel
name 	: drupal/devel
descrip. : Various blocks, pages, and functions for developers.
keywords :
versions : * 1.2.0
type 	: drupal-module
license  : GPL-2.0+
source   : [git] https://git.drupal.org/project/devel 8.x-1.2
dist 	: [zip] https://ftp.drupal.org/files/projects/devel-8.x-1.2.zip 8.x-1.2
names	: drupal/devel

support
source : http://cgit.drupalcode.org/devel
issues : http://drupal.org/project/devel
irc : irc://irc.freenode.org/drupal-contribute

requires
drupal/core ~8.0

suggests
symfony/var-dumper Pretty print complex values better with var-dumper available

Composer simplifie tellement la vie que l’on ne se soucie plus vraiment de la gestion de dépendances. Si toutefois vous voulez avoir une idée des dépendances d’un module, vous pouvez le visualiser grâce à l’option –tree.

$ composer show --tree drupal/commerce
drupal/commerce 2.1.0 Drupal Commerce is a flexible eCommerce solution.
├──commerceguys/intl ~0.7
│  └──php >=5.4.0
├──drupal/address ~1.0
│  ├──commerceguys/addressing ~1.0
│  │  ├──commerceguys/enum ~1.0
│  │  │  └──php >=5.4.0
│  │  ├──doctrine/collections ~1.0
│  │  │  └──php ^5.6 || ^7.0
│  │  └──php >=5.5.0
│  ├──commerceguys/intl ~0.7
│  │  └──php >=5.4.0
│  └──drupal/core *
├──drupal/core ~8.4
├──drupal/entity ~1.0
│  └──drupal/core ~8.3
├──drupal/entity_reference_revisions ~1.0
│  └──drupal/core ~8.0
├──drupal/inline_entity_form ~1.0
│  └──drupal/core ~8.0
├──drupal/profile ~1.0
│  ├──drupal/core ~8.1
│  └──drupal/entity *
│     └──drupal/core ~8.3
└──drupal/state_machine ~1.0
   └──drupal/core ~8.0

Conclusion

Composer dispose de tout un tas de commandes, il n’y avait ici que quelques unes des commandes. La doc en ligne est plutôt bien faite, n’hésitez pas à vous y reporter. Composer est une solution efficace quant à la gestion des dépendances et autres librairies pour Drupal 8 . D’autant plus si vous travaillez en équipe, c’est indispensable.

Ressources

Julien Dubreuil

Vous avez une idée, un projet web à réaliser ?

Ensemble, mettons en oeuvre sa réussite. Je vous accompagne dans vos projets, depuis l'élaboration du cahier des charges jusqu'à la mise en production. Pour plus d'information n'hésitez pas à me contacter.

Contactez-moi