Dynamic-Mess.com


"The world is a dynamic mess of jiggling things..."

Installer et utiliser composer sous Linux

Article posté le 03-11-2014 dans la catégorie Linux

Article mis à jour le : 05-05-2022

Petit tutoriel pour expliquer comment installer le gestionnaire de paquets composer sous Linux

Composer PHP

Plus besoin de présenter composer : il s'agit du gestionnaire de paquet de PHP le plus utilisé. Le but de ce petit tutoriel est de vous expliquer comment l'installer sous Linux, ainsi que son utilisation basique.

1 - Installation de composer

Il y a trois façons de procéder. Deux d'entre-elles nécessitent PHP.

La première: ouvrez la console, et copions composer.phar, le fichier de composer :

php -r "eval('?>'.file_get_contents('https://getcomposer.org/installer'));"

La deuxième, toujours dans la console:

curl -sS https://getcomposer.org/installer | php

Troisième méthode: télécharger l'installer sur le site de composer. Ensuite positionnez vous, avec la console, sur le répertoire où se trouve l'installer, et faites :

php installer

A présent que vous avez installé composer, copions-le à présent dans /user/local/bin afin de pouvoir y accéder depuis tout le système :

mv composer.phar /usr/local/bin/composer

Pour vérifier que tout c'est bien passé, ouvrez une nouvelle console , et tapez :

composer --version

Vous aurez alors la version de votre installation de composer!

Note : il se peut que vous ayez aussi besoin de Git pour certains bundles que vous souhaiterez installer plus tard via composer. L'installation de Git est simplissime :

apt-get install git

 

2 - Mettre à jour composer

La mise à jour de composer s'effectue simplement, via cette commande :

composer self-update

 

3 - Gestion du projet: installation, création et mise à jour

3-1 Installation des dépendances ou création d'un projet

Quand vous téléchargez un projet, vous ne téléchargez en général, pour des raisons de poids et de cohérence, que son squelette: il s'agit uniquement des fichiers de ce projet. Il manque tout ce qui est encombrant: les dépendances. Normal, ce sont des projets tiers, cela ne nous concerne pas.

Un projet utilisant composer dispose ainsi à minima d'un fichier listant les dépendances du projet: composer.json. Pour les télécharger et ainsi pouvoir utiliser ce projet, rien de plus simple:

 composer install

Voilà, les dépendans sont installées. Cependant, comme vous pourrez le constater, il y a aussi, souvent, un fichier composer.lock à la racine de certains projets. Explications...

  1. Le fichier composer.json est une liste présentant les dépendances requises, avec des contraintes de version ;
  2. le composer.lock lui est un contrat de verrouillage précis, créée à partir du composer.json.

Allons plus en détails.

En effet, de votre côté, quand vous créez un projet, vous pourrez aussi avoir à versionner un fichier composer.lock. Celui-ci aura pour objectif de gérer les dependances ainsi que leur version de référence, une sorte de guide plus précis que le composer.json. Alors que le fichier .json ne contient lui que leur nom et demande une version peu précise de celles requises pour votre projet (par exemple je veux la librairie toto/titi en version 1.x) le .lock lui doit contenir la version exacte, leur checksum, les dépendances des dépendances...

Avant d'aller plus loin, voici ce que vous devez retenir :

Pour bien comprendre, voici ce que fait la commande composer install:

Exemple d'application: supprimez votre dossier vendor, faire un composer install à nouveau: il va télécharger tout ce qui est précisé dans le .lock.

Pour plus d'infos sur comment créer un projet utilisant composer, je vous laisse regarder la dock qui est assez claire.

Rappellez-vous d'une chose, en général, les commandes composer vous permettent de tout faire. Vous avez rarement besoin de toucher manuellement les fichiers .lock et .json.

3-2 Ajout d'une dépendance

composer require vendor/module

Attention cependant: certains packages ne doivent être installés que dans des environnements de développement (donc pas en production). C'est le cas de PHPUnit par exemple. Pour faire cela, vous avez juste à passer un paramètre à votre commande :  --dev. Exemple:

composer require vendor/module --dev

Sachez que plus tard, si vous faites un simple composer install, composer regardera si vous avez une variable d'environnement pour savoir si vous êtes en mode production ou développement et donc savoir si il peut installer ou non ces dépendances utiles uniquement en mode développement. Si vous avez un doute en production, vous pouvez toujours faire :

composer install --no-dev

 Plus d'infos ici.

3-3 Mise à jour de librairies

Je viens de parler de la commande update. Vous devinez qu'il s'agit de la mise à jour du projet. Ce n'est pas aussi simple. Voici ce qu'elle fait:

A présent, vous comprenez qu'un update ne doit pas être fait à la légère! Ou alors, faites le que pour une seule dépendance bien précise! Le fichier .lock étant aussi géré dans votre gestionnaire de version (SVN, Git...), cela signifie que si vous faites un update sans vous concertez, vous risquez de vous retrouvez tous avec une version de dépendance non validée par l'équipe. Le fichier .lock sert donc de base sur les versions précises requises

composer update vendor/module est donc la bonne pratique pour ne mettre à jour qu'une seule dépendance. On peut même préciser la version souhaitée.

4 - Quelques commandes et infos utiles 

Mettre à jour qu'une seule dépendance (possible de préciser la version)

composer update foo/bar

Fichier lock plus à jour

Cette commande update peut aussi être utilisée dans une variante afin de mettre à jour votre .lock à partir de votre .json, notamment quand vous avez ce message:

Warning: The lock file is not up to date with the latest changes in composer.json, you may be getting outdated dependencies, run update to update them.

Remarquez que ceci peut être aussi provoqué par une modification volontaire et manuelle de votre .lock (dangereux), ou même un espace en trop, bref n'importe quoi qui altererait le checksum de votre .json. Pour régler le problème:

composer update --lock

Cette commande sert notamment à regénerer le fichier composer.lock après résolu un conflit dedans.

Ajouter une dépendance, et préciser la version ou la branche

 composer require "vendor/module:1.0.0"

Note: si vous ne précisez pas la version: composer prendra automatiquement la dernière version stable

Note 2: vous pouvez donc préciser ce que vous voulez comme version mais également jusqu'où vous voulez aller, en utilisant les caractères ~ et ^. Exemple:

~1.2 signifie que vous voulez une version >=1.2 et < 2.0.0

~1.2.3 signifie que vous voulez une version >=1.2 et < 1.3.0

Toutefois l'utilisation du caractère ^ est recommandée: ^1.2.3 signifie une version >=1.2. et < 2.0

Voici quelques exemples :

.json    "vendorname/mymodule": "~1.0", // version demandée dans le composer.json
.lock     "version": "1.20", // version installée, la dernière disponible

Autre exemple dans un autre projet avec le meme composant:

json : "vendorname/mymodule": "^1.14" // version demandée dans le composer.json
lock:   "version": "1.20", // version installée, la dernière disponible

Autre exemple en json: "vendorname/my-bundle": "^1.27", accepte toutes les versions 1.x

Le mieux est de citer la doc qui explique bien pourquoi c'est recommandé d'utiliser ^ plutôt que ~ :

The ^ operator behaves very similarly, but it sticks closer to semantic versioning, and will always allow non-breaking updates. For example ^1.2.3 is equivalent to >=1.2.3 <2.0.0 as none of the releases until 2.0 should break backwards compatibility. For pre-1.0 versions it also acts with safety in mind and treats ^0.3 as >=0.3.0 <0.4.0.

Une information importante : par défaut composer va utiliser la branche master du projet. Si vous voulez utiliser une branche précise (ci-dessous, le nom de la branche est 2.0-working-branch ):

composer require vendorname/my-bundle:dev-2.0-working-branch

Ajouter toutes les dépendances d'un vendor

composer require 'react/react=*'

Retirer un module

composer remove vendor/module-name

Créer un projet à partir d'un dépôt

composer create-project doctrine/orm path 2.2.0

 

Installation en production avec optimisation l'autoload

composer install --no-dev --optimize-autoloader

Exécuter composer dans un autre répertoire

Exemple: 

composer -d=/var/www/test/current install --no-dev

Vider le cache

composer clearcache

ou juste celui de quelques packages en particuloer:

composer clearcache packagename1 packagename2 ...

Un petit bilan des commandes

Un internaute bien intentionné a créé une page qui récapitule bien la plupart des commandes de composer.

5 - Erreurs lors de l'installation

Note : Parmi les erreurs fréquemement rencontrées, voici les deux principales et leur solution :

/usr/bin/php7.2 -d memory_limit=-1 /usr/local/bin/composer install

Plus globalement, après l'installation de composer, vous pouvez effectuer un diagnostic de votre installation avec cette commande :

composer diagnose

6- Fichier où sont stockées d'éventuels identifiants composer pour des dépôts privés

~/.composer/auth.json

Exemple de contenu du fichier:

{    "http-basic": {
        "repo.mondepot.com": {
            "username": "fjlkre5j56fk4r8e2j8k2l8f3j4lkerfj",
            "password": "g5d6h75yd2h8j4r2vgh72hy4f4"
        }
    }
}

7- Créer une dépendance installable via composer

Une fois que votre repository git dédié à votre module est créé, vous pouvez travailler directement en l'intégrant dans un "vrai projet" pour faire vos tests. Exemple d'un module my-bundle, que vous développez. Vous voulez travailler avec la branche 2.0-working-branch mais dans le cadre d'un projet existant, pour tester son intégration. Voici ce que vous devez taper dans le dit projet:

composer require vendorname/my-bundle:dev-2.0-working-branch  --prefer-source

En allant dans vendor/vendorname, vous trouverez votre bundle avec son dépôt git, vous permettant ainsi de travailler directement dedans et évitez les aller retours.

Note: depuis un dépôt GitHub, j'ai du utiliser cette commande:

composer require reponame/project-name dev-develop --prefer-source

(develop étant le nom de la branche).

A noter aussi que parfois, il faut supprimer le dossier de la librairie dans vendor et recommencer pour que cela marche.


Cet article vous a plu? Découvrez d'autres articles :


comments powered by Disqus