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 aux packages 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
- GitHub - Composer template for Drupal projects
- Drupal.org - Using Composer in a Drupal project
- Drupal.org - Using Composer to install Drupal packages through Drupal.org