composer global require
에 대한 더 안전한 대안을 제공합니다.
Cgr은 몇 년 동안 실제 환경에서 사용되어 왔습니다. 그러나 아래의 문제 대기열과 '제한 사항'을 참조하세요.
Composer global require
명령은 많은 PHP 명령줄 도구에 권장되는 설치 기술입니다. 그러나 이러한 방식으로 도구를 설치하는 사용자는 서로 다른 프로젝트 간의 종속성 충돌로 인해 설치 오류가 발생할 위험이 있습니다. cgr 스크립트는 composer global require
와 유사하게 작동합니다. composer require
사용하여 명령줄 도구의 사용자별 전역 복사본을 설치하지만 전역적으로 설치된 다른 도구와 종속성 충돌이 발생하지 않는 격리된 위치에 있습니다.
cgr 스크립트는 보안과 관련이 없습니다. Composer global require를 통해 설치하는 것보다 더 안전하지도 덜 안전하지도 않습니다.
Composer 자체에서는 명령줄 도구 설치를 위한 "편리한" 명령으로 composer global require
권장합니다. 불행하게도 이 권장 사항은 모든 프로젝트의 종속성을 독립적으로 관리해야 한다는 Composer의 기본 가정과 상충됩니다. Composer global
명령은 단일 "전역" 프로젝트를 생성합니다. composer global require
통해 설치된 프로젝트는 모두 이 위치에 설치되며 해당 종속성은 모두 병합됩니다. 이는 함께 작동하도록 설계되지 않았으며 해당 종속성을 단일 오토로더로 결합할 필요가 없는 두 개의 독립적인 프로젝트 간에 충돌이 발생할 수 있음을 의미합니다. 이런 종류의 상황이 발생하면 초보자가 진단하기가 매우 어려운 경우가 많습니다.
cgr
이라는 이 스크립트는 에뮬레이트하는 Composer 명령인 "composer global require"의 이름을 따서 명명되었습니다. 기능적으로는 기존 명령과 거의 동일하지만 훨씬 더 안전한 PHP 명령줄 도구를 전역적으로 설치하기 위한 대체 메커니즘을 제공합니다. Cgr 스크립트는 설치된 각 프로젝트에 대해 별도의 디렉토리를 만듭니다. 기본적으로 설치 위치는 ~/.composer/global/org/project
입니다. 설치된 프로젝트의 작곡가.json 파일에 나열된 모든 바이너리 스크립트는 표준 Composer bin 디렉터리인 ~/.composer/vendor/bin
에 설치됩니다.
cgr 스크립트에는 자체 종속성이 없으므로 Composer global require
명령을 통해 설치하는 것이 안전합니다.
composer global require consolidation/cgr
아직 수행하지 않은 경우 Composer 홈 디렉터리의 vendor/bin
$PATH에 추가해야 합니다. 그 후에는 설치 지침에서 Composer global require
사용을 권장하는 명령줄 도구 대신 cgr
사용할 수 있습니다.
PATH에 올바른 bin 디렉터리를 추가하려면 다음을 수행하세요.
PATH="$(composer config -g home)/vendor/bin:$PATH"
예:
cgr drush/drush
Composer global require 명령과 달리 cgr을 사용하면 프로젝트를 설치하기 전에 프로젝트의 최소 안정성을 설정할 수 있습니다. 이는 composer create-project
명령과 동일한 방식으로 수행됩니다.
cgr --stability RC pantheon-systems/terminus 1.0.0-alpha2
cgr 스크립트의 동작은 명령줄 옵션과 환경 변수를 사용하여 사용자 정의할 수 있습니다.
옵션 | 환경변수 | 설명 |
---|---|---|
--작곡기 경로 | CGR_COMPOSER_PATH | Composer 바이너리의 경로입니다. |
--기본 디렉터리 | CGR_BASE_DIR | "글로벌" 프로젝트를 저장할 위치입니다. |
--bin-dir | CGR_BIN_DIR | 프로젝트 바이너리를 설치할 위치입니다. |
이러한 변수가 정의되지 않은 경우 cgr은 환경 변수에 대한 Composer 설명서에 설명된 대로 COMPOSER_HOME
환경 변수의 값을 사용할 기본 디렉터리로 사용합니다.
~/bin에 바이너리를 설치하도록 cgr을 구성하려면 ~/.bashrc 파일에 다음을 추가합니다.
export CGR_BIN_DIR=$HOME/bin
$PATH에 있는 한 CGR_BIN_DIR
에 대해 원하는 디렉토리를 선택할 수 있습니다.
프로젝트 정보를 표시하려면 다음을 실행하세요.
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
이 여전히 표준 Composer global require
명령처럼 작동하는 경우 $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
이 경로를 사용하는 경우 composer require
실행하기 전에 필요에 따라 mkdir
및 cd
사용하여 수동으로 설치 위치를 설정해야 합니다. 단순히 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 작업을 제공하는 외부 프로젝트와 함께 Robo를 설치).
Composer의 변경으로 인해 이 도구가 불필요해질 때까지 이 도구가 임시 솔루션이 되기를 바랍니다. 업데이트는 Composer 문제를 참조하세요.