Ou l’on reparle de gestion de dépendances

Si vous me suivez depuis un petit moment déjà, vous devez savoir que j’avais choisi de gérer les dépendances de mon projet en utilisant le système de sous module de git : git submodule. Récemment, j’ai décidé de changer de système pour la gestion de dépendances du projet. Retour sur ce revirement …

Pourquoi changer ? git submodule ne convenait plus ?

La réponse peut paraître étonnante, mais si, git submodule convenait parfaitement et répondait de façon correcte au besoin de gestion des dépendances.

Cependant, l’un des principal défaut de git submodule – comme je l’exposais dans mon précédent billet – c’est que Github (la plateforme sur laquelle est hébergé le code source du projet) ne tient pas compte des sous modules lors de la création des archives .zip automatiques.

D’autre part, il semblerait que peu de développeurs connaissent/sachent utiliser les sous modules dans git :anguished:

Enfin, la gestion des dépendances du projet n’est pas aisée. En effet, on ne dispose pas d’un fichier détaillant l’ensemble des dépendances utilisées par le projet ni quelle est la version utilisée. Cela rend d’autant plus difficile le suivi des mises à jour des dites dépendances.

Deux nouveaux gestionnaires de dépendances.

Pourquoi deux ? Tout simplement parce qu’ils ne répondent pas au même besoin, l’un se chargera d’installer des dépendances backend (framework, plugins, librairies serveur) tandis que l’autre gèrera les dépendances frontend (framework css, librairies clientes javascript, etc.)

Composer pour la gestion des dépendances Backend.

Logo de Composer

Logo de Composer

Cela fait environ deux ans qu’on entend parler de Composer. C’est le même principe que les gestionnaires de paquets sous GNU/Linux. À vrai dire, d’ailleurs, rien de nouveau sous le soleil puisque le projet PEAR proposait déjà cela depuis un bon bout de temps.

Là où Composer réussi à faire mieux, c’est qu’il rend la vie beaucoup plus facile à l’utilisateur final en laissant au développeur la possibilité de spécifier un fichier composer.json contenant le détail de l’ensemble des dépendances à installer. Il est également possible de distinguer les dépendances de développement de celles de production.

Voici un exemple de fichier composer.json.

<span class="token punctuation">{</span>
    <span class="token string">"name"</span><span class="token punctuation">:</span> <span class="token string">"jtraulle/opencomp"</span><span class="token punctuation">,</span>
    <span class="token string">"description"</span><span class="token punctuation">:</span> <span class="token string">"Application de gestion d'acquisition de compétences"</span><span class="token punctuation">,</span>
    <span class="token string">"type"</span><span class="token punctuation">:</span> <span class="token string">"project"</span><span class="token punctuation">,</span>
    <span class="token string">"license"</span><span class="token punctuation">:</span> <span class="token string">"AGPL-3.0"</span><span class="token punctuation">,</span>
    <span class="token string">"repositories"</span><span class="token punctuation">:</span> <span class="token punctuation">[</span>
        <span class="token punctuation">{</span>
            <span class="token string">"type"</span><span class="token punctuation">:</span> <span class="token string">"pear"</span><span class="token punctuation">,</span>
            <span class="token string">"url"</span><span class="token punctuation">:</span> <span class="token string">"http://pear.cakephp.org"</span>
        <span class="token punctuation">}</span>
    <span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token string">"require"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
        <span class="token string">"pear-cakephp/cakephp"</span><span class="token punctuation">:</span> <span class="token string">">=2.4.0"</span><span class="token punctuation">,</span>
        <span class="token string">"slywalker/boost_cake"</span><span class="token punctuation">:</span> <span class="token string">"1.*"</span><span class="token punctuation">,</span>
        <span class="token string">"zendframework/zendpdf"</span><span class="token punctuation">:</span> <span class="token string">"2.0.*@dev"</span><span class="token punctuation">,</span>
        <span class="token string">"enygma/yubikey"</span><span class="token punctuation">:</span> <span class="token string">"dev-master#72713487f4af0bfa65be45d19d755ee430d2237f"</span><span class="token punctuation">,</span>
        <span class="token string">"dompdf/dompdf"</span><span class="token punctuation">:</span> <span class="token string">"dev-master#4d890e0ee9e113812103a8b2c56ec6387f5d086c"</span>
    <span class="token punctuation">}</span><span class="token punctuation">,</span>
    <span class="token string">"require-dev"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
        <span class="token string">"cakephp/debug_kit"</span><span class="token punctuation">:</span> <span class="token string">"2.2.*"</span>
    <span class="token punctuation">}</span><span class="token punctuation">,</span>
    <span class="token string">"config"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
        <span class="token string">"vendor-dir"</span><span class="token punctuation">:</span> <span class="token string">"Vendor/"</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
JavaScript

Comme vous pouvez le constater, la syntaxe de ce fichier – rédigé en utilisant la JSON permet de le rendre très lisible.

Composer est un outil très souple puisque outre l’installation de paquets depuis le dépôt de paquets centralisé Packagist.org, il permet également l’installation de paquets depuis des dépôts Git et PEAR (encore utilisé par CakePHP).

L’outil permet également de verrouiller une dépendance sur une révision en particulier en spécifiant le hash de commit (comme en lignes 16 et 17).

L’installation est très simple, puisqu’il suffit de taper la ligne de commande suivante à la racine du projet pour installer Composer :

curl -sS https://getcomposer.org/installer <span class="token operator">|</span> php
Bash

Et pour récupérer les dépendances du projet un simple php composer <span class="token function">install</span> suffit !

Bower gère les dépendances Frontend.

Logo de Bower

Logo de Bower

Bower, c’est le nom de ce merveilleux petit oiseau. Ce gestionnaire de dépendances Frontend nous viens de l’équipe de Twitter, aussi auteure du merveilleux framework CSS Bootstrap !

Bower permet de gérer l’installation et la mise à jour de vos librairies Javascript/CSS parmi un dépôt de plus de 6700 composants.

Tout comme Composer, Bower se base sur un fichier bower.json pour l’installation des dépendances.

<span class="token punctuation">{</span>
    <span class="token string">"name"</span><span class="token punctuation">:</span> <span class="token string">"Opencomp"</span><span class="token punctuation">,</span>
    <span class="token string">"version"</span><span class="token punctuation">:</span> <span class="token string">"3.0.0"</span><span class="token punctuation">,</span>
    <span class="token string">"dependencies"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
        <span class="token string">"jquery"</span><span class="token punctuation">:</span> <span class="token string">"2"</span><span class="token punctuation">,</span>
        <span class="token string">"chosen"</span><span class="token punctuation">:</span> <span class="token string">"https://github.com/harvesthq/chosen/releases/download/1.0.0/chosen_v1.0.0.zip"</span><span class="token punctuation">,</span>
        <span class="token string">"jstree"</span><span class="token punctuation">:</span> <span class="token string">"v.pre1.0"</span><span class="token punctuation">,</span>
        <span class="token string">"bootstrap"</span><span class="token punctuation">:</span> <span class="token string">"3"</span><span class="token punctuation">,</span>
        <span class="token string">"bootstrap-datepicker"</span><span class="token punctuation">:</span> <span class="token string">"https://github.com/eternicode/bootstrap-datepicker/archive/master.zip"</span><span class="token punctuation">,</span>
        <span class="token string">"font-awesome"</span><span class="token punctuation">:</span> <span class="token string">"3.2"</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
JavaScript

Il est à noter que Bower permet également l’installation de dépendances Frontend de façon arbitraire (lignes 6 et 9), simplement en lui fournissant un fichier d’archive (.zip, .tar.gz, etc.).

On peut également choisir le répertoire dans lequel on souhaite télécharger les dépendances en le spécifiant dans un fichier .bowerrc.

<span class="token punctuation">{</span>
  <span class="token string">"directory"</span> <span class="token punctuation">:</span> <span class="token string">"webroot/components"</span>
<span class="token punctuation">}</span>
JavaScript

L’installation est légèrement plus compliquée que Composer puisque Bower nécessite l’installation au préalable de Node.js et npm pour fonctionner. Cependant, des paquets pré-compilés existent sur le site officiel du projet.

Une fois Node.js installé, Bower s’installe très simplement en tapant <span class="token function">npm</span> <span class="token function">install</span> -g bower. On peut ensuite récupérer les dépendances du projet en tapant un petit bower <span class="token function">install</span> 😉

versioneye, la cerise sur le gâteau.

Logo de versioneye, application SaaS de suivi des dépendances

Logo de versioneye

versioneye est un SaaS qui vous permet de garder un oeil sur les version de vos dépendances de façon à savoir si celles-ci sont à jour ou obsolètes. Il est possible d’importer vos projet directement depuis Github. Pour le moment, le service ne gère que l’analyse de fichier composer.json mais l’analyse et le suivi des fichiers bower.json est également prévue 😊

À la prochaine les loulous 😘

A propos Jean Traullé

Passionné par l'informatique et les nouvelles technos, miagiste, papa de opencomp.fr, #sysadm, #ProxmoxVE, #Docker, #TYPO3, #CakePHP enthousiaste 😊
Ce contenu a été publié dans Non classé, avec comme mot(s)-clé(s) , , , , . Vous pouvez le mettre en favoris avec ce permalien.

4 réponses à Ou l’on reparle de gestion de dépendances

  1. error500 dit :

    Je cherchai cet article pour comprendre la différence entre composer et bower. Merci.

  2. Ping : Vidéo utilisation de Composer | Opencomp.fr – Carnet de développement

  3. Phil dit :

    As-tu testé Gemnasium ?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *