Accueil / Blog / Métier / 2016 / Gérer ses dépendances Drupal 7 avec Composer

Gérer ses dépendances Drupal 7 avec Composer

Par Sébastien Corbin publié 08/12/2016
Drupal.org distribue maintenant les modules et thèmes dans son propre dépôt Packagist, voyons comment en tirer partie avec Composer.
Gérer ses dépendances Drupal 7 avec Composer

Composer avec Drupal

Dans un souci de se réunifier avec la communauté PHP, l'équipe de l'infrastructure de Drupal.org a mis en place un dépôt Packagist. Cette initiative, lancée d'abord par webflo sur https://packagist.drupal-composer.org/ puis reprise par l'équipe de l'association sur packages.drupal.org, permet de gérer Drupal et ses dépendances via Composer.

L'utilité de Composer et de récupérer et placer automatiquement des modules dans les bons dossiers ainsi que de créer un autoloader qui gère automatiquement les namespaces PHP.

Installation de composer

L'installation de composer sous un système Unix est simple :

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"php -r "if (hash_file('SHA384', 'composer-setup.php') === 'e115a8dc7871f15d853148a7fbac7da27d6c0030b848d9b3dc09e2a0388afed865e6a3d6b3c0fad45c48e2b5fc1196ae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"php composer-setup.phpphp -r "unlink('composer-setup.php');"mv composer.phar /usr/local/bin/composer

Sous Windows, c'est encore plus simple, un installer est à disposition.

Le fonctionnement de Composer

Le fonctionnement de Composer (en mode utilisateur) est assez simple, il requiert de connaître un peu sa terminologie :

  • composer.json: définit les metadonnées du projet et de ses dépendances.
  • composer.lock: fichier de métadonnées qui contient les informations calculées à propos des dépendances et de leur état (versions, urls, etc.).
  • composer install: télécharge et installe les dépendances, construit l'autoloader de classes PHP. Si un fichier .lock est présent, il installera les dépendances en fonction de celui-ci, sinon il calculera et résoudra les informations sur les versions et les urls pour les dépendances.
  • composer update: met à jour les dependances et reconstruit le fichier .lock.
  • composer require: ajoute une nouvelle dépendance, mettant à jour les fichiers .json et .lock.
  • composer remove: retire une dépendance, mettant à jour les fichiers .json et .lock.

Toutes les commandes de Composer doivent être executées dans le même repertoire que votre fichier composer.json.

Exemple de fichier composer.json pour Drupal 7

{
  "name" : "Example site",
  "description" : "Drupal Site",
  "license" : "Proprietary",
  "repositories": [
    {
      "type": "composer",
      "url": "https://packages.drupal.org/7"
    }
  ],
  "minimum-stability" : "dev",
  "prefer-stable" : true,
  "require" : {
    "composer/installers" : "^1.0.20",
    "cweagans/composer-patches" : "~1.0",
    "drush/drush": "7.*",
    "drupal/drupal": "7.*",
    "slowprog/composer-copy-file": "^0.1.2",
    "symfony/dependency-injection" : "~3.0",
    "symfony/templating" : "~3.0",
    "symfony/twig-bridge" : "~3.0",
    "symfony/twig-bundle" : "~3.0",
    "tfd7/tfd7": "dev-master",
    "twig/extensions": "~1.3",
    "twig/twig": "~1.20|~2.0",
    "makinacorpus/drupal-sf-dic": "^3.1"
  },
  "config" : {
    "vendor-dir" : "lib/vendor"
  },
  "extra" : {
    "installer-paths": {
      "www" : [ "type:drupal-core" ],
      "www/sites/all/modules/composer/{$name}" : [ "type:drupal-module" ],
      "www/sites/all/libraries/composer/{$name}" : [ "type:drupal-library" ],
      "www/sites/all/themes/composer/{$name}" : [ "type:drupal-theme" ]
    },
    "copy-file": {
      "www/sites/all/modules/composer/drupal-sf-dic/Resources/engine": "www/sites/all/themes/engines/twig"
    }
  },
  "scripts": {
      "append_settings": "grep -Fq \"require_once DRUPAL_ROOT . '/../lib/vendor/autoload.php';\" www/sites/default/default.settings.php || echo \"\nrequire_once DRUPAL_ROOT . '/../lib/vendor/autoload.php';\n\n\\$GLOBALS['conf']['kernel.cache_dir'] = DRUPAL_ROOT . '/../cache/';\n\\$GLOBALS['conf']['kernel.logs_dir'] = DRUPAL_ROOT . '/../logs/';\n\" >> www/sites/default/default.settings.php",
    "post-install-cmd": [
      "SlowProg\\CopyFile\\ScriptHandler::copy",
      "@append_settings"
    ],
    "post-update-cmd": [
      "SlowProg\\CopyFile\\ScriptHandler::copy",
      "@append_settings"
    ]
  },
  "autoload": {
    "psr-4": {
      "Example\\MyLibrary\\" : "www/sites/all/modules/custom/my_library/src"
    }
  }
}

Une fois la commande composer install lancée, vous pouvez installer votre site normalement. Vous pouvez dès à présent utiliser des composants PHP dans vos modules.

Cette configuration inclut également un module magique, sf_dic, qui permet d'utiliser Symfony dans Drupal, et notamment :

Déclarer des services et utiliser le DIC de Symfony Créer des formulaires Drupal 7 à la mode Drupal 8
ABONNEZ-VOUS À LA NEWSLETTER !
Voir aussi
Mon Top 30 des modules Drupal 8 Mon Top 30 des modules Drupal 8 16/02/2019

Transcription d'une conférence donnée au Drupalcamp Paris 2019

Makina Corpus lance une nouvelle offre pour sécuriser les projets Drupal des ESN Makina Corpus lance une nouvelle offre pour sécuriser les projets Drupal des ESN 18/02/2019

Formations et accompagnement pour sécuriser les projets Drupal

Drupal : un CMS pas comme les autres Drupal : un CMS pas comme les autres 15/02/2019

Mais moi je l'aime, c'est pas de ma faute…

Une usine à sites en Drupal Une usine à sites en Drupal 18/12/2018

Qu'est ce que c'est, et en avez-vous besoin ?

La roadmap Drupal 8 La roadmap Drupal 8 05/04/2017

Sorti fin 2015, le CMS Drupal 8 a basculé dans un nouveau cycle de versions tous les 6 mois. Cet ...