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 D7 vers Drupal 11
04/04/2024

Migration d'un site Drupal 7 en Drupal 11

Trucs, astuces et "bouts" de code pour migrer votre site web de Drupal 7 à Drupal 11. Compte-rendu d'une conférence donnée au Drupalcamp Rennes 2024.

Voir l'article
Image
Formation Migration Drupal 10
03/04/2024

Du nouveau dans notre gamme de forma­tions Drupal

Maîtri­sez le CMS Drupal de bout en bout avec notre panel complet de forma­tions couvrant la migra­tion (notre petite dernière), l’ad­mi­nis­tra­tion, le déve­lop­pe­ment et l’in­té­gra­tion Drupal. Pour deve­nir expert, plon­gez dans l’uni­vers Drupal !

Voir l'article
Image
Encart article DrupalCamp 2024
06/03/2024

Makina Corpus, parte­naire du Drupal­Camp 2024

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

Voir l'article

Inscription à la newsletter

Nous vous avons convaincus