Makina Blog

Le blog Makina-corpus

Gérer ses dépendances Drupal 7 avec Composer


Drupal.org distribue maintenant les modules et thèmes dans son propre dépôt Packagist, voyons comment en tirer partie avec Composer.

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

Actualités en lien

Image
Encart article DrupalCamp 2024
06/03/2024

Makina Corpus, parte­naire de la Drupal­Camp 2024

Nous sommes fiers d’an­non­cer que Makina Corpus est le spon­sor de la Drupal­Camp à Rennes. Notre expert vous y propose une confé­rence « migrer de Drupal 7 à Drupal 10 ».

Voir l'article
Image
DrupalCon Lille Sponsor
20/10/2023

DrupalCon Lille 2023 : quand Drupal prend (enfin ?) le virage de l'UX

Présentation rapide de sujets ergonomiques discutés lors de la première journée de la DrupalCon Lille 2023

Voir l'article
Image
DrupalCon 23 Encart
14/09/2023

Makina Corpus sponsorise la DrupalCon 2023 à Lille

La DrupalCon 2023 revient en France du 17 au 20 octobre et notre équipe y participe ! Pour cette nouvelle édition de la DruplaCon Fr, Makina Corpus s'engage auprès de Drupal et sponsorise l'événement 2023 à Lille.

Voir l'article

Inscription à la newsletter

Nous vous avons convaincus