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 !

Pourquoi ?

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, …)

Vous 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.

blog comments powered by Disqus