Makina Blog
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 :
- Utiliser des Bundle Symfony dans Drupal 7
- Créer un thème Twig
- Déclarer des services et utiliser le DIC de Symfony (article à venir)
- Créer des formulaires Drupal 7 à la mode Drupal 8 (article à venir)
Déclarer des services et utiliser le DIC de Symfony Créer des formulaires Drupal 7 à la mode Drupal 8
Actualités en lien
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.
Makina Corpus, partenaire du DrupalCamp 2024
Nous sommes fiers d’annoncer que Makina Corpus est le sponsor du DrupalCamp à Rennes. Notre expert vous y propose une conférence « migrer de Drupal 7 à Drupal 10 ».