Composer : Gérer les dépendances de son projet simplement !
Composer a été la star du Forum PHP et du Symfony Live pour cette année 2012, on a pu en entendre parler dans une majorité des conférences de ces deux salons.
Grâce au travail de Nils Adermann et de Jordi Boggiano, il est désormais très simple de gérer les dépendances de son projet PHP. Largement inspiré de NPM (Node) et Bundler (Ruby), ce nouvel outil a très vite été adopté par la communauté. Faisons un petit tour de ses fonctionnalités !
Section intitulée pourquoiPourquoi ?
Il faut l’avouer, en PHP, nous avons tendance à réinventer la roue, il nous est tous arrivé de coder une librairie sans chercher avant si quelqu’un l’avait déjà faite. Pourquoi ? Très certainement parce que malgré l’existence de PEAR, le monde PHP n’a pendant très longtemps pas eu de système de gestion de dépendances simple à utiliser par les développeurs de librairies et leurs utilisateurs.
Oui, PHP a PEAR , cependant son utilisation n’est pas aussi simple que Composer, et cet outil peut poser des problèmes dans certains cas (impossibilité d’utiliser deux versions d’un package, les dépendances du projet sont à écrire à la main dans un fichier README, …)
Section intitulée vous-avez-dit-simpleVous avez dit simple ?
On ne peut plus simple, mon cher ami ! Pour installer composer, deux lignes de commande suffisent :
$ cd /path/to/my/joli/project $ curl -s http://getcomposer.org/installer | php
Voila l’outil installé à la racine de votre projet :
$ php composer.phar
Protips : Il est inutile d’installer une version de composer par projet, en le déplaçant dans /usr/bin, ou en ajoutant son chemin d’accès dans votre PATH, vous pourrez utiliser composer.phar de n’importe quel dossier sur votre machine.
Composer utilise un fichier de configuration “composer.json” pour déterminer quels sont les packages à installer et leurs numéros de version. Par exemple, pour installer Silex dans sa version 1.0.*, il suffit de créer un fichier composer.json, et d’y indiquer dans la clé “require” le nom du package (vendor/package-name) et la version souhaitée :
{ "minimum-stability": "dev", "require": { "silex/silex": "1.0.*" } }
On lance alors l’installation :
$ php composer.phar install
Une fois la commande terminée, on peut voir un nouveau dossier, et un nouveau fichier. Le dossier vendor/, dont le nom est configurable, contient le code du micro-framework Silex (vendor/silex) ainsi que ses dépendances (vendor/pimple, vendor/symfony). Le fichier composer.lock indique les packages installés, en précisant le hash précis de la version (hash de commit Git).
En mettant ces deux fichiers sur votre outil de versioning préféré, vous êtes sûr que tous les autres développeurs auront les bonnes librairies, et dans les mêmes versions que vous.
Composer ne s’arrête pas là, il génère aussi un fichier autoload.php dans vendor/composer permettant le chargement automatique des packages installés de cette façon. Autrement dit, nul besoin de faire un require() des fichiers à chaque ajout de librairies. Grâce à l’inclusion du fichier autoload.php, PHP chargera dynamiquement les bons fichiers afin de pouvoir utiliser les classes fournies dans une librairie, comme sur cet exemple :
require_once __DIR__.'/../vendor/composer/autoload.php'; $app = new Silex\Application();
A l’aide de deux commandes, vous allez pouvoir chercher et installer un nouveau package. Par exemple, le PHP SDK de Facebook :
$ php composer.phar search facebook facebook/php-sdk : Facebook PHP SDK $ php composer.phar require facebook/php-sdk
Il suffit de spécifier la version, et de laisser Composer faire : le code est récupéré, l’autoloader et le fichier composer.lock sont mis à jour. Et voila ! C’est aussi simple que ça !
Composer a de nombreuses autres fonctionnalités, par exemple la possibilité de lancer des scripts de post-installation, ou de post-update. Par exemple, à chaque installation d’une nouvelle dépendance sur notre application Symfony2, la commande d’installation des assets est lancée.
Protips: Si vous souhaitez que vos assets soit installés en lien symbolique et non en copie des fichiers (ie. l’option—symlink de la commande app/console assets:install), vous pouvez ajouter dans votre composer.json :
"extra": { "symfony-assets-install": "symlink" }
Voila pour un premier tour rapide sur composer, le nouveau gestionnaire de dépendances de PHP. Afin de se rappeler facilement et rapidement des commandes Composer et des différentes propriétés du fichier composer.json, rendez-vous sur Composer-Cheatsheet, l’essentiel de la documentation en une page.
Commentaires et discussions
Automatiser le front-end dans un projet Symfony2
Dans tout projet Web, nous sommes confrontés à des tâches répétitives : Télécharger les différentes librairies ; Compiler les assets (Sass, Less, Stylus, CoffeeScript, TypeScript, …) ; Optimiser les images ; Gérer la concaténation des fichiers javascript, puis la minification…
Lire la suite de l’article Automatiser le front-end dans un projet Symfony2
Nos articles sur le même sujet
Ces clients ont profité de notre expertise
JoliCode a formé l’équipe de développement d’Evaneos aux bonnes pratiques pour l’écriture de tests unitaires efficaces et utiles. Nous en avons également profité pour mettre en place une plateforme d’intégration continue pour accompagner l’évolution de la plateforme.
Nous avons développé une plateforme de site génériques autour de l’API Phraseanet. À l’aide de Silex de composants Symfony2, nous avons accompagné Alchemy dans la réalisation d’un site déclinable pour leurs clients. Le produit est intégralement configurable et supporte de nombreux systèmes d’authentification (Ldap, OAuth2, Doctrine ou anonyme).
JoliCode a assuré le développement et les évolutions d’une des API centrale de l’épargne salariale chez Groupama. Cette API permet à plusieurs applications de récupérer des informations et d’alimenter en retour le centre de donnée opérationnel. Cette pièce applicative centrale permet de développer rapidement des applications avec une source de vérité…