Proporcionar una alternativa más segura al composer global require
.
Cgr se ha utilizado en entornos del mundo real desde hace varios años; sin embargo, consulte la cola de problemas y las 'Limitaciones' a continuación.
El comando global require
de Composer es una técnica de instalación recomendada para muchas herramientas de línea de comandos PHP; sin embargo, los usuarios que instalan herramientas de esta manera corren el riesgo de encontrar fallas de instalación causadas por conflictos de dependencia entre diferentes proyectos. El script cgr se comporta de manera similar a composer global require
, utilizando composer require
para instalar una copia global por usuario de una herramienta de línea de comandos, pero en una ubicación aislada que no experimentará conflictos de dependencia con otras herramientas instaladas globalmente.
El script cgr no está relacionado con la seguridad; No es ni más ni menos seguro que la instalación a través de Composer Global Require.
El propio Composer recomienda composer global require
como un comando "conveniente" para instalar herramientas de línea de comandos. Desafortunadamente, esta recomendación contradice la suposición básica de Composer, que es que las dependencias de cada proyecto deben gestionarse de forma independiente. El comando global
de Composer crea un único proyecto "global"; Los proyectos instalados a través de composer global require
se instalarán todos en esta ubicación y todas sus dependencias se fusionarán. Esto significa que pueden surgir conflictos entre dos proyectos independientes que nunca fueron diseñados para funcionar juntos y no necesitan combinar sus dependencias en un solo cargador automático. Cuando surge este tipo de situación, suele ser muy difícil para los principiantes diagnosticarla.
Este script, llamado cgr
, lleva el nombre de "composer global require", el comando de Composer que emula. Ofrece un mecanismo de reemplazo para instalar herramientas de línea de comandos PHP globalmente que es funcionalmente equivalente (casi) al comando existente, pero mucho más seguro. El script Cgr creará un directorio separado para cada proyecto instalado; De forma predeterminada, la ubicación de instalación es ~/.composer/global/org/project
. Todos los scripts binarios enumerados en el archivo Composer.json del proyecto instalado se instalarán en el directorio bin estándar de Composer, ~/.composer/vendor/bin
.
Debido a que el script cgr no tiene dependencias propias, es seguro instalarlo mediante el comando global require
de Composer:
composer global require consolidation/cgr
Si aún no lo ha hecho, también deberá agregar el vendor/bin
del directorio de inicio de Composer a su $PATH. A partir de entonces, puede sustituir cgr
por cualquier herramienta de línea de comandos cuyas instrucciones de instalación recomienden el uso de Composer global require
.
Para agregar el directorio bin correcto a su RUTA:
PATH="$(composer config -g home)/vendor/bin:$PATH"
Ejemplo:
cgr drush/drush
A diferencia del comando Composer global require, es posible usar cgr para establecer la estabilidad mínima para un proyecto antes de instalarlo. Esto se hace de la misma manera que el comando composer create-project
:
cgr --stability RC pantheon-systems/terminus 1.0.0-alpha2
El comportamiento del script cgr se puede personalizar con opciones de línea de comandos y variables de entorno.
Opción | Variable de entorno | Descripción |
---|---|---|
--ruta-compositor | CGR_COMPOSER_PATH | La ruta al binario de Composer. |
--base-dir | CGR_BASE_DIR | Dónde almacenar proyectos "globales". |
--bin-dir | CGR_BIN_DIR | Dónde instalar los binarios del proyecto. |
Si estas variables no están definidas, entonces cgr usa el valor de la variable de entorno COMPOSER_HOME
como directorio base para usar como se describe en la documentación de Composer sobre variables de entorno.
Para configurar cgr para instalar archivos binarios en ~/bin, agregue lo siguiente a su archivo ~/.bashrc:
export CGR_BIN_DIR=$HOME/bin
Puede seleccionar cualquier directorio que desee para CGR_BIN_DIR
, siempre que esté en su $PATH.
Para mostrar la información de un proyecto, ejecute:
cgr info drush/drush
Para mostrar la información de todos los proyectos instalados mediante 'cgr', ejecute:
cgr info
Para actualizar un proyecto que instaló con cgr
, ejecute:
cgr update drush/drush
Para actualizar todo lo instalado por cgr
, ejecute:
cgr update
Para eliminar un proyecto:
cgr remove drush/drush
Para actualizar o eliminar cgr en sí, ejecute composer global update consolidation/cgr
o composer global remove cgr
. Tenga en cuenta que eliminar cgr no tiene ningún efecto en los comandos que instaló con cgr; permanecerán instalados y funcionales.
Si descubre que cgr
todavía se comporta como un comando global require
estándar de Composer, verifique dos veces la configuración de su variable $PATH y use which cgr
y alias cgr
para determinar si su shell está seleccionando o no este script. Es posible que cgr entre en conflicto con alguna otra herramienta; por ejemplo, el proyecto oh-my-zsh define un alias cgr. Si esto es un problema para usted, unalias cgr
o quizás agregue alias cgrx="$HOME/.composer/vendor/bin/cgr"
para ejecutar esta herramienta experimental como cgrx
.
Composer también cargará complementos de Composer desde el proyecto Composer "global". Esto es raro; sin embargo, si desea instalar un instalador de Composer globalmente, debe utilizar el comando composer global require
directamente. El script cgr aísla los proyectos que instala entre sí para evitar posibles conflictos entre dependencias; este aislamiento también hace que los complementos de Composer no estén disponibles en el contexto global.
El script cgr mantiene la conveniencia de administrar automáticamente la ubicación de instalación global; sin embargo, si no lo desea, simplemente puede ejecutar comandos similares a:
COMPOSER_BIN_DIR=$HOME/bin composer require org/project:~1.0
Si sigue esta ruta, deberá configurar la ubicación de instalación manualmente usando mkdir
y cd
según sea necesario antes de ejecutar composer require
. No puede simplemente configurar COMPOSER_BIN_DIR globalmente, ya que hacerlo haría que los archivos binarios de los proyectos locales se instalen en su directorio bin global, lo que, por supuesto, no sería deseable.
En un script de Integración Continua, la siguiente construcción es útil:
/usr/bin/env COMPOSER_BIN_DIR=$HOME/bin composer --working-dir=$HOME/project require org/project:~1.0
Cambie el directorio de instalación ( $HOME/project
) para que coincida con el proyecto que se está instalando, de modo que cada proyecto se instale en su propia ubicación separada.
El complemento Composer bamarni/composer-bin-plugin ofrece una forma similar de gestionar la instalación aislada de herramientas binarias definiendo ubicaciones de instalación con nombres separados. Esto proporciona una forma cómoda de instalar varios proyectos juntos (por ejemplo, instalar Robo junto con proyectos externos que proporcionen tareas Robo adicionales en un proyecto 'robo').
Se espera que esta herramienta sea una solución provisional, hasta que los cambios en Composer la hagan innecesaria. Consulte la edición de Composer para obtener actualizaciones.