Fournir une alternative plus sûre à composer global require
.
Cgr est utilisé dans des environnements réels depuis plusieurs années maintenant ; cependant, consultez la file d'attente des problèmes et les « Limitations » ci-dessous.
La commande Composer global require
est une technique d'installation recommandée pour de nombreux outils de ligne de commande PHP ; cependant, les utilisateurs qui installent les outils de cette manière risquent de rencontrer des échecs d'installation causés par des conflits de dépendances entre différents projets. Le script cgr se comporte de la même manière que composer global require
, en utilisant composer require
pour installer une copie globale par utilisateur d'un outil de ligne de commande, mais dans un emplacement isolé qui ne connaîtra pas de conflits de dépendances avec d'autres outils installés globalement.
Le script cgr n'a aucun rapport avec la sécurité ; ce n'est ni plus ni moins sécurisé que l'installation via composer global require.
Composer lui-même recommande composer global require
comme commande « pratique » pour installer les outils de ligne de commande. Malheureusement, cette recommandation est en contradiction avec l'hypothèse de base de Composer, selon laquelle les dépendances de chaque projet doivent être gérées indépendamment. La commande global
Composer crée un seul projet « global » ; les projets installés via composer global require
seront tous installés à cet emplacement et leurs dépendances seront toutes fusionnées. Cela signifie que des conflits peuvent survenir entre deux projets indépendants qui n'ont jamais été conçus pour fonctionner ensemble et qui n'ont pas besoin de combiner leurs dépendances dans un seul chargeur automatique. Lorsque ce genre de situation se présente, il est souvent très difficile à diagnostiquer pour les débutants.
Ce script, appelé cgr
, porte le nom de « composer global require », la commande Composer qu'il émule. Il offre un mécanisme de remplacement pour l'installation globale des outils de ligne de commande PHP qui est fonctionnellement équivalent (presque) à la commande existante, mais beaucoup plus sûr. Le script Cgr créera un répertoire séparé pour chaque projet installé ; par défaut, l'emplacement d'installation est ~/.composer/global/org/project
. Tous les scripts binaires répertoriés dans le fichier composer.json du projet installé seront installés dans le répertoire bin standard de Composer, ~/.composer/vendor/bin
.
Étant donné que le script cgr n'a pas de dépendances propres, il peut être installé en toute sécurité via la commande global require
de Composer :
composer global require consolidation/cgr
Si vous ne l'avez pas déjà fait, vous devrez également ajouter le vendor/bin
du répertoire personnel de Composer à votre $PATH. Par la suite, vous pouvez remplacer cgr
par n'importe quel outil de ligne de commande dont les instructions d'installation recommandent l'utilisation de Composer global require
.
Pour ajouter le bon répertoire bin à votre PATH :
PATH="$(composer config -g home)/vendor/bin:$PATH"
Exemple:
cgr drush/drush
Contrairement à la commande composer global require, il est possible d'utiliser cgr pour définir la stabilité minimale d'un projet avant de l'installer. Cela se fait de la même manière que la commande composer create-project
:
cgr --stability RC pantheon-systems/terminus 1.0.0-alpha2
Le comportement du script cgr peut être personnalisé avec des options de ligne de commande et des variables d'environnement.
Option | Variable d'environnement | Description |
---|---|---|
--chemin-du-compositeur | CGR_COMPOSER_PATH | Le chemin d’accès au binaire Composer. |
--rép-base | CGR_BASE_DIR | Où stocker les projets « globaux ». |
--bin-dir | CGR_BIN_DIR | Où installer les binaires du projet. |
Si ces variables ne sont pas définies, alors cgr utilise la valeur de la variable d'environnement COMPOSER_HOME
comme répertoire de base à utiliser comme décrit dans la documentation Composer sur les variables d'environnement.
Pour configurer cgr pour installer les binaires sur ~/bin, ajoutez ce qui suit à votre fichier ~/.bashrc :
export CGR_BIN_DIR=$HOME/bin
Vous pouvez sélectionner n'importe quel répertoire de votre choix pour le CGR_BIN_DIR
, à condition qu'il se trouve dans votre $PATH.
Pour afficher les informations d'un projet, exécutez :
cgr info drush/drush
Pour afficher les informations de tous les projets installés via 'cgr', exécutez :
cgr info
Pour mettre à jour un projet que vous avez installé avec cgr
, exécutez :
cgr update drush/drush
Pour mettre à jour tout ce qui est installé par cgr
, exécutez :
cgr update
Pour supprimer un projet :
cgr remove drush/drush
Pour mettre à jour ou supprimer cgr lui-même, exécutez composer global update consolidation/cgr
ou composer global remove cgr
. Notez que la suppression de cgr n'a aucun effet sur les commandes que vous avez installées avec cgr ; ils resteront installés et fonctionnels.
Si vous constatez que cgr
se comporte toujours comme une commande global require
standard de Composer, vérifiez les paramètres de votre variable $PATH et utilisez which cgr
et alias cgr
pour déterminer si ce script est sélectionné ou non par votre shell. Il est possible que cgr soit en conflit avec un autre outil ; par exemple, le projet oh-my-zsh définit un alias cgr. Si cela vous pose un problème, supprimez unalias cgr
, ou ajoutez peut-être alias cgrx="$HOME/.composer/vendor/bin/cgr"
pour exécuter cet outil expérimental en tant que cgrx
.
Composer chargera également les plugins Composer du projet Composer « global ». C'est rare ; cependant, si vous souhaitez installer un programme d'installation de Composer globalement, vous devez utiliser directement la commande composer global require
. Le script cgr isole les projets qu'il installe les uns des autres pour éviter les conflits potentiels entre dépendances ; cet isolement rend également les plugins Composer indisponibles dans le contexte global.
Le script cgr conserve la commodité de gérer automatiquement l'emplacement d'installation global pour vous ; cependant, si cela n'est pas souhaité, vous pouvez simplement exécuter des commandes similaires à :
COMPOSER_BIN_DIR=$HOME/bin composer require org/project:~1.0
Si vous suivez cette voie, vous devrez configurer manuellement votre emplacement d'installation à l'aide mkdir
et cd
si nécessaire avant d'exécuter composer require
. Vous ne pouvez pas simplement définir COMPOSER_BIN_DIR globalement, car cela entraînerait l'installation des binaires des projets locaux dans votre répertoire bin global, ce qui, bien sûr, ne serait pas souhaitable.
Dans un script d'intégration continue, la construction suivante est utile :
/usr/bin/env COMPOSER_BIN_DIR=$HOME/bin composer --working-dir=$HOME/project require org/project:~1.0
Modifiez le répertoire d'installation ( $HOME/project
) pour qu'il corresponde au projet en cours d'installation, afin que chaque projet soit installé dans son propre emplacement distinct.
Le plugin Composer bamarni/composer-bin-plugin offre une manière similaire de gérer l'installation isolée d'outils binaires en définissant des emplacements d'installation nommés distincts. Cela offre un moyen pratique d'installer plusieurs projets ensemble (par exemple, installer Robo avec des projets externes fournissant des tâches Robo supplémentaires dans un projet « robo »).
Nous espérons que cet outil constituera une solution provisoire, jusqu'à ce que des modifications apportées à Composer le rendent inutile. Consultez le problème Composer pour les mises à jour.