Предоставить более безопасную альтернативу composer global require
.
Cgr уже несколько лет используется в реальных условиях; однако см. очередь проблем и раздел «Ограничения» ниже.
Команда global require
Composer — рекомендуемый метод установки для многих инструментов командной строки PHP; однако пользователи, устанавливающие инструменты таким способом, рискуют столкнуться со сбоями установки, вызванными конфликтами зависимостей между различными проектами. Сценарий cgr ведет себя аналогично composer global require
, используя composer require
для установки глобальной копии инструмента командной строки для каждого пользователя, но в изолированном месте, где не будут возникать конфликты зависимостей с другими глобально установленными инструментами.
Сценарий cgr не имеет отношения к безопасности; это не более и не менее безопасно, чем установка через композитор global require.
Сам Composer рекомендует composer global require
как «удобную» команду для установки инструментов командной строки. К сожалению, эта рекомендация противоречит основному предположению Composer, согласно которому зависимости каждого проекта должны управляться независимо. global
команда Composer создает один «глобальный» проект; все проекты, установленные через composer global require
будут установлены в этом месте, и все их зависимости будут объединены. Это означает, что могут возникнуть конфликты между двумя независимыми проектами, которые никогда не предназначались для совместной работы и которым нет необходимости объединять их зависимости в один автозагрузчик. Когда такая ситуация действительно возникает, новичкам часто бывает очень трудно ее диагностировать.
Этот сценарий, названный cgr
, назван в честь «composer global require», команды Composer, которую он эмулирует. Он предлагает механизм замены для глобальной установки инструментов командной строки PHP, который функционально эквивалентен (почти) существующей команде, но намного безопаснее. Скрипт Cgr создаст отдельный каталог для каждого установленного проекта; по умолчанию местоположение установки — ~/.composer/global/org/project
. Любые двоичные сценарии, перечисленные в файле композитора.json установленного проекта, будут установлены в стандартный каталог bin Composer, ~/.composer/vendor/bin
.
Поскольку сценарий cgr не имеет собственных зависимостей, его можно безопасно установить с помощью global require
Composer:
composer global require consolidation/cgr
Если вы еще этого не сделали, вам также потребуется добавить vendor/bin
из домашнего каталога Composer в ваш $PATH. После этого вы можете заменить cgr
на любой инструмент командной строки, инструкции по установке которого рекомендуют использовать Composer global require
.
Чтобы добавить правильный каталог bin в ваш PATH:
PATH="$(composer config -g home)/vendor/bin:$PATH"
Пример:
cgr drush/drush
В отличие от команды композитора global require, cgr можно использовать для установки минимальной стабильности проекта перед его установкой. Это делается так же, как команда composer create-project
:
cgr --stability RC pantheon-systems/terminus 1.0.0-alpha2
Поведение сценария cgr можно настроить с помощью параметров командной строки и переменных среды.
Вариант | Переменная среды | Описание |
---|---|---|
--composer-путь | CGR_COMPOSER_PATH | Путь к двоичному файлу Composer. |
--base-dir | CGR_BASE_DIR | Где хранить «глобальные» проекты. |
--bin-dir | CGR_BIN_DIR | Куда установить двоичные файлы проекта. |
Если эти переменные не определены, то cgr использует значение переменной среды COMPOSER_HOME
в качестве базового каталога, как описано в документации Composer по переменным среды.
Чтобы настроить cgr для установки двоичных файлов в ~/bin, добавьте следующее в файл ~/.bashrc:
export CGR_BIN_DIR=$HOME/bin
Вы можете выбрать любой каталог для CGR_BIN_DIR
, если он находится в вашем $PATH.
Чтобы отобразить информацию о проекте, запустите:
cgr info drush/drush
Чтобы отобразить информацию обо всех проектах, установленных через «cgr», запустите:
cgr info
Чтобы обновить проект, который вы установили с помощью cgr
, запустите:
cgr update drush/drush
Чтобы обновить все, что установлено cgr
, запустите:
cgr update
Чтобы удалить проект:
cgr remove drush/drush
Чтобы обновить или удалить сам cgr, запустите composer global update consolidation/cgr
или composer global remove cgr
. Обратите внимание, что удаление cgr не влияет на команды, которые вы установили с помощью cgr; они останутся установленными и функциональными.
Если вы обнаружите, что cgr
по-прежнему ведет себя как стандартная global require
Composer, дважды проверьте настройки переменной $PATH и используйте which cgr
и alias cgr
, чтобы определить, выбран ли этот сценарий вашей оболочкой. Вполне возможно, что cgr может конфликтовать с каким-то другим инструментом; например, проект oh-my-zsh определяет псевдоним cgr. Если для вас это проблема, либо unalias cgr
, либо добавьте alias cgrx="$HOME/.composer/vendor/bin/cgr"
для запуска этого экспериментального инструмента как cgrx
.
Composer также загрузит плагины Composer из «глобального» проекта Composer. Это редкость; однако, если вы хотите установить установщик Composer глобально, вам необходимо напрямую использовать команду composer global require
. Скрипт cgr изолирует устанавливаемые им проекты друг от друга, чтобы избежать потенциальных конфликтов между зависимостями; эта изоляция также делает любые плагины Composer недоступными в глобальном контексте.
Скрипт cgr обеспечивает удобство автоматического управления глобальным расположением установки; однако, если это нежелательно, вы можете просто запустить команды, подобные:
COMPOSER_BIN_DIR=$HOME/bin composer require org/project:~1.0
Если вы пойдете по этому пути, вам нужно будет настроить место установки вручную, используя mkdir
и cd
если необходимо, перед запуском composer require
. Вы не можете просто установить COMPOSER_BIN_DIR глобально, так как это приведет к установке двоичных файлов из локальных проектов в ваш глобальный каталог bin, что, конечно, нежелательно.
В сценарии непрерывной интеграции полезна следующая конструкция:
/usr/bin/env COMPOSER_BIN_DIR=$HOME/bin composer --working-dir=$HOME/project require org/project:~1.0
Измените каталог установки ( $HOME/project
), чтобы он соответствовал устанавливаемому проекту, чтобы каждый проект устанавливался в отдельном месте.
Плагин Composer bamarni/composer-bin-plugin предлагает аналогичный способ управления изолированной установкой бинарных инструментов путем определения отдельных именованных мест установки. Это дает удобный способ совместной установки нескольких проектов (например, установка Robo вместе с внешними проектами, обеспечивающая дополнительные задачи Robo в «робопроекте»).
Есть надежда, что этот инструмент станет временным решением, пока изменения в Composer не сделают его ненужным. См. выпуск Composer для получения обновлений.