Kaherecode

Le guide du débutant Composer

Mamadou Aliou Diallo
@alioukahere 31 janv. 2019
0

Composer est un outil de gestion de dépendance en PHP. Il vous permet de déclarer les librairies dont votre projet dépend, et il va vous les gérer (installation/mise à jour). C'est vraiment l'outil de gestion de dépendance en PHP.

Dans ce tutoriel, nous allons d'abord voir ce que c'est qu'un gestionnaire de dépendances, nous allons ensuite installer composer, et voir de façon générale comment fonctionne cet outil.

Un gestionnaire de dépendance, qu'est ce que c'est?

Un gestionnaire de dépendance est un outil qui vous permet de gérer les dépendances de votre projet. Les gestionnaires de dépendances sont un super concept. Imaginer donc que vous travaillez sur un projet qui dépend d'autres librairies, disons que votre site utilise swiftmailer qui va vous permettre d'envoyer des mails en PHP, la méthode hard c'est de le télécharger et le mettre quelque part dans votre projet, jusqu'ici tout va bien. Maintenant que faire si une nouvelle version de swiftmailer sort, vous faites alors la même chose, en écrasant l'ancienne version. Disons maintenant que swiftmailer à son tour dépend d'une autre librairie: email-validator qui va vous permettre de valider un email, qui à son tour peut dépendre d'une autre librairie. Il faut aussi télécharger cette librairie et faire la mise à jour en écrasant l'ancienne version, et vous allez en faire de même pour toutes les librairies que vous voulez utiliser.

Maintenant, disons que ça continue ainsi, et à un certain moment, il y a un problème avec email-validator par exemple, que faire alors, il faut revenir aux versions antérieures et faire des tests jusqu'à ce que ça marche.

Ou encore vous rejoignez un projet, est-ce qu'ils utilisent swiftmailer, si oui où est-ce qu'il est installé et quelle version ils utilisent.

Ceci est juste un aperçu de la gestion des dépendances sans utiliser un outil approprié. Et ici nous avons parlé que de deux dépendances, ceci n'est pas le cas dans de grand projet, où vous allez y trouver des dizaines de dépendances et qui à leur tour dépendent d'autres librairies.

Le gestionnaire des dépendances résout ces problèmes en automatisant tout cela. La récupération de dépendances telles que swiftmailer, email-validator, symfony, etc. peut être effectuée automatiquement. Vous pouvez également fixé des versions de préférences pour votre projet pour éviter les conflits.

Un gestionnaire de dépendances standardise la manière dont les packages sont stockés et d'où ils sont utilisés. En pratique, cela signifie que tout projet utilisant le même gestionnaire de dépendances suivra la même structure - au moins pour les dépendances. Bref, les gestionnaires de dépendances sont le bonheur.

Installer composer

Vous pouvez installer composer sur n'importe quel système d'exploitation. Pour les utilisateurs de Windows, vous pouvez suivre la procédure sur le site de composer. Pour les systèmes Linux et OSx rendez vous sur cette page. Entrer donc les 4 premières lignes qu'ils vous demandent de rentrer:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

Alors ne copier pas ce code, rendez-vous plutôt sur la page pour copier le code qui s'y trouve, parce que ce code peut changer tout le temps, mais vous trouverez la version authentique de ce code sur la page de composer.

Un fichier composer.phar doit être créé dans votre dossier actuel, dans ce cas composer est installé localement. Il est plus mieux de l'installer globalement et de pouvoir y accéder de n'importe où sur votre ordinateur. Pour cela, il faut déplacer le fichier composer.phar dans le /bin, et nous voulons aussi utiliser Composer en appelant la commande composer, c'est plus logique et joli que composer.phar. Sans quitter donc le dossier actuel, entrez la commande:

mv composer.phar /bin/composer

Vous devez maintenant avoir composer installer, pour le vérifier, entrer la commande suivante dans un terminal:

composer

Voici l'affichage chez moi:

Si vous avez un problème, essayez de revoir l'installation, ou posez votre question dans la section commentaire ci-dessous.

Il faut savoir que la version peut être différente de la votre, ce n'est donc pas un problème.

Utilisation de composer

Maintenant, nous allons découvrir comment utiliser composer. Mais avant, il faut savoir que composer comme on l'a dit est un gestionnaire de dépendance, il gère donc les dépendances de votre projet, et il fonctionne en pair avec Packagist qui est son répertoire de dépendances. Pour faire simple, voilà comment ça fonctionne, Packagist est le dépôt des librairies PHP, c'est ici que vous allez trouver les librairies que vous voulez utilisez, nous allons donc utiliser composer pour aller chercher ces librairies depuis Packagist.

Quand on utilise composer, le cœur de tout son fonctionnement est un fichier JSON appelé composer.json. C'est dans ce fichier nous allons mentionner nos dépendances et leur version. Quand on crée un tout nouveau projet, le fichier composer.json n'existe pas, il faut donc le créer.

Mais attend, pars pas créer un fichier en dur comme ça, on va utiliser composer pour créer ce fichier, on va en quelque sorte initialiser composer dans ce projet, pour cela, placez vous à la racine de votre projet et entrer la commande:

composer init

Avec cette commande, nous initialisons composer dans notre projet, et créons en même temps le fichier composer.json en renseignant des informations qui va nous être demander par composer:

Regardez cette image:

Si vous confirmez, un fichier composer.json va alors être créer dans le dossier dans lequel vous vous trouvez, dans votre projet. Vous pouvez l'ouvrir et voir, c'est le même contenu que vous venez de remplir.

{
    "name": "orion/composer",
    "description": "Un projet sur kaherecode",
    "type": "project",
    "authors": [
        {
            "name": "alioukahere",
            "email": "alioukahere@gmail.com"
        }
    ],
    "minimum-stability": "stable",
    "require": {}
}

C'est dans ce fichier que nous allons définir nos dépendances et leurs différentes versions, voyons tout de suite donc comment ajouter une dépendance à notre projet.

Ajouter une dépendance

Maintenant que nous avons composer dans notre projet, nous pouvons spécifier nos dépendances. Pour installer une dépendance, nous avons deux méthodes, en utilisant la commande composer require ou en mentionnant notre dépendance dans la section require du fichier composer.json

composer require

La première méthode consiste à laisser composer lui même écrire dans le fichier composer.json, disons que nous voulons installer swiftmailer par exemple, pour cela, on écrit:

composer require swiftmailer/swiftmailer

Bon, il suffit de parler un minimum anglais, pour comprendre ce que composer nous dit dans la console. Nous l'avons demander de nous installer swiftmailer, composer nous a choisi la version 6.1.3 de swiftmailer parce que c'est la version stable au moment d'écrire ce tutoriel, cette version peut donc être différente chez vous, souvenez vous du minimum-stability dans le fichier composer.json, en même temps ils nous installe les deux dépendances de swiftmailer qui sont email-validator et lexer, nous n'avons rien fait pour ça nous, et c'est là toute la beauté de cet outil. Vous pouvez maintenant regarder le fichier composer.json, la section require a été modifiée pour ajouter swiftmailer, mais ce n'est pas le seul changement sur notre projet, un autre fichier composer.lock à été créé à la racine du projet, nous allons tout de suite voir son intérêt. Le changement majeur c'est le dossier vendor qui a aussi été créé, ce dossier contient quatre dossiers, composer qui est le gestionnaire de dépendance, ensuite il y a le dossier doctrine qui contient lexer (doctrine/lexer), le dossier swiftmailer dans lequel on retrouve un autre dossier swiftmailer (swiftmailer/swiftmailer), au fait, c'est dans ce dossier vendor que composer enregistre le code source des dépendances de notre projet.

Une autre chose à préciser, composer utilise un système de cache pour éviter à chaque fois d'aller chercher les packages sur internet, ce qui peut être long. Si vous regardez sur l'image de mon terminal que je vous ai montré, devant l'installation des dépendances, il y a Loading from cache, cela est du au fait que j'ai déjà télécharger ces dépendances au paravant, composer va donc les chercher dans son cache, et comme il les trouve, il ne part pas chercher sur internet.

La question qui se pose maintenant, c'est pourquoi j'ai mis swiftmailer/swiftmailer devant le require au lieu de swiftmailer tout court?

Pour installer une dépendance, rendez-vous sur Packagist, comme on l'a dit c'est le dépôt officiel des packages PHP.

Si vous connaissez le package que vous voulez utiliser, il suffit de le rechercher dans la barre de recherche tout en haut et de le sélectionner, sinon, dans mon cas par exemple, je veux d'un package pour m'aider à envoyer des mails à partir de mon application, pour cela je recherche le mot mail dans la barre de recherche

En premier je vois swiftmailer, c'est le plus populaire dans ce domaine, à ce jour il à plus de 100.000.000 développement et 7.000 stars, je clique donc dessus.

Juste après le nom du package, je vois la commande composer qui me montre comment installer le package:

composer require swiftmailer/swiftmailer

Juste en dessous, j'ai la description du package. Encore en dessous, j'ai la version stable du package et la date de publication du package. Après il y a une section requires, cette section nous montre les packages dont dépend le package swiftmailer et leur version en fonction de la version de swiftmailer, il y a donc php et euglias/email-validator. A coté, il y a une autre section requires(dev) (on verra tout de suite ce que c'est), dans cette section aussi nous avons une liste de package avec leur version.

Dans le bloc de droite (si vous êtes sur PC), tout en haut, on voit des informations sur les mainteneurs de ce package et aussi des informations sur le package lui même, comme le dépôt, la page web, le nombre de téléchargements, ... Et en bas nous avons les différentes versions du package, par défaut, la version stable est sélectionné, vous pouvez donc choisir la version que vous voulez en cliquant sur la ligne correspondante.

Installer une dépendance en modifiant le fichier composer.json

La deuxième manière d'ajouter une dépendance, c'est de le faire directement dans le fichier composer.json, on va ajouter twig qui est un moteur de templates très puissant utilisé par Symfony.

{
    "name": "orion/composer",
    "description": "Un projet sur kaherecode",
    "type": "project",
    "authors": [
        {
            "name": "alioukahere",
            "email": "alioukahere@gmail.com"
        }
    ],
    "minimum-stability": "stable",
    "require": {
        "swiftmailer/swiftmailer": "^6.1",
        "twig/twig": "^2.6"
    }
}

A la ligne 14, je rajoute twig, maintenant il faut l'installer sur notre projet, parce que nous l'avons juste ajouter dans le fichier composer.json. Pour cela, on utilise la commande:

composer update

composer nous installe aussi twig et ses dépendances. L'importance d'utiliser cette méthode, c'est de pouvoir spécifier la version que l'on veut nous même.

Encore composer cherche les dépendances dans le cache et il les trouve. Si vous regardez dans le dossier vendor, les dossiers symfony et twig ont été créés.

Spécifier les versions

Dans le fichier composer.json, on déclare les dépendances en suivant cette syntaxe:

"require":  {
    "nom":  "version"
}

Comme nous l'avons dit, les librairies sont sur Packagist, si vous voulez d'une nouvelle dépendance, rendez vous alors sur le site web et rechercher la dépendance que vous voulez.

Il y a six différentes manières de spécifier la version que l'on veut avec composer:

Plage de versions

Vous pouvez utiliser les opérateurs de comparaison <, >, <=, >= et != pour spécifier la version de la dépendance. Vous pouvez aussi utiliser les opérateurs logique AND qui est représenté par un espace ou une virgule et OR qui est représenté par ||. Nous pouvons par exemple écrire:

Le trait d'union

Le trait d'union va nous permettre de spécifier une plage de version. Nous pouvons par exemple écrire 1.0 - 2.0 ce qui équivaut à >=1.0.0 <2.1. 1.0.0 - 2.1.0 équivaut quant à lui à >=1.0.0 <=2.1.0.

Le joker

En utilisant un caractère générique, vous pouvez spécifier un pattern. Par exemple 1.0.* inclura toute les version en dessus en partant de 1.0.0, puis 1.0.1 et ainsi de suite, mais pas 1.1, cela équivaut donc à >=1.0.0 <1.1

Le tilde

Le tilde est idéal pour cibler une version minimale requise et pour autoriser toute nouvelle version mineure, mais pas la version majeure suivante. Si vous écrivez ~1.4, vous permettez alors toute les versions en dessus de 1.4 mais pas les versions 2.0. Cela équivaut donc à >=1.4 <2.0

L'accent circonflexe

L'accent circonflexe est destiné à permettre toutes les mises à jour sans changement majeur. Si un projet suit un versionnage sémantique, il ne devrait y avoir aucune amélioration qui rompt la compatibilité au sein d'une branche majeure. Si vous écrivez donc ^1.4.5, vous permettez toute les versions au dessus mais n'incluant pas la version 2.0.

Dev-master

En spécifiant dev-master, vous récupérer la dernière version actuellement en développement qui n'a pas encore été marquée avec un numéro de version. Cela peut être très bien en cours de développement, mais vous devez être conscient que le potentiel de bug est plus élevé dans ces versions.

Règles des numéros de version

Vous vous êtes peut être demander ce que c'est que c'est que c'est trois chiffres dans les versions. Chaque chiffre a une définition, au fait les numéro sont comme ceci:

version_majeure.version_mineur.petit_changement

Le fichier composer.lock

La première fois que nous avons installé notre première dépendance, composer à créer un fichier composer.lock. Si vous le regardez, il ressemble beaucoup à notre fichier composer.json, mais avec beaucoup plus de code en plus.

Ce fichier permet en quelque sorte de verrouiller toute les versions des dépendances utilisées par notre projet, et c'est l'une des fonctionnalités majeurs de composer. A chaque fois que nous installons une dépendance, composer écrit dans le fichier composer.lock la version de la dépendance installer, son nom, le lien vers son dépôt, sa référence, ...

Le require-dev

Composer nous permet de spécifier des dépendances que nous allons utiliser en développement. Pour cela, il faut écrire ces dépendances dans la section require-dev au lieu de require

{
    "name": "orion/composer",
    "description": "Un projet sur kaherecode",
    "type": "project",
    "authors": [
        {
            "name": "alioukahere",
            "email": "alioukahere@gmail.com"
        }
    ],
    "minimum-stability": "stable",
    "require": {
        "swiftmailer/swiftmailer": "^6.1",
        "twig/twig": "^2.6"
    }

    "require-dev": {
        "sensio/generator-bundle": "~3.1"
    }
}

Mais le souci c'est que même en production les dépendances dans le require-dev seront installer, composer ne sait pas faire la différence entre le développement et la production. Pour éviter cela, utilisez les commandes composer install et composer update avec l'option --no-dev.

De nos jours, composer est utiliser sur tout les grands projet PHP, et Packagist est une vrai mine d'or de librairie PHP, faites y un tour pour voir.

L'une des importances majeures de composer c'est bien sur dans le partage du code ou le déploiement de votre code sur un serveur. Pas besoin de partager le code source des dépendances, ce qui peut être vraiment lourd, il suffit d'envoyer les deux fichiers composer.json et composer.lock et c'est bon, de l'autre côté un simple composer update et le problème est réglé.

Vous pouvez faire plein d'autres trucs avec composer, vous pouvez en savoir plus sur leur site. J'espère vous avoir donner envie de plus apprendre sur ce super outil.

C'est fini pour ce tutoriel, si tu as des questions ou des problèmes, n'hésite pas, rends toi dans la section commentaire ci-dessous et explique nous ton problème.

Tu as aimé ce tutoriel? Partage le avec tes proches dans la section ci-dessous. Sinon dis moi ce que tu n'a pas aimé, j'accepte les critiques :-)


Partage ce tutoriel


Merci à

Mamadou Aliou Diallo

Mamadou Aliou Diallo

@alioukahere

Développeur web fullstack avec une passion pour l’entrepreneuriat et les nouvelles technologies. Fondateur de Kaherecode.

Continue de lire

Discussion

Tu dois être connecté pour participer à la discussion. Me connecter.