몇 가지 종속성이있는 프로젝트가 있고 다른 프로젝트를 설치하고 싶지만 다른 프로젝트를 그대로 유지하고 싶습니다. 그래서를 편집 composer.json
했지만 실행 composer install
하면 다음과 같은 출력이 나타납니다.
Installing dependencies from lock file
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.
Your requirements could not be resolved to an installable set of packages.
Problem 1
- laravel/framework dev-master requires ext-mcrypt * -> the requested PHP extension mcrypt is missing from your system.
- laravel/framework dev-master requires ext-mcrypt * -> the requested PHP extension mcrypt is missing from your system.
- Installation request for laravel/framework dev-master -> satisfiable by laravel/framework dev-master.
우선, 나는 mcrypt가 설치되어 있기 때문에 그것이 거기에 대해 왜 불평하는지 모르겠습니다.
그렇다면이 새로운 의존성을 어떻게 설치할 수 있습니까?
내 작곡가 .json :
{
"require": {
"opauth/opauth": "*",
"opauth/facebook": "*",
"opauth/google": "*",
"opauth/twitter": "*",
"imagine/Imagine": "dev-develop",
"laravel/framework": "4.*",
"loic-sharma/profiler": "dev-master"
},
"autoload": {
"classmap": [
"app/libraries",
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/tests/TestCase.php"
]
},
"minimum-stability": "dev"
}
답변
새 패키지를 설치하기 위해서는 두 가지 옵션이 있습니다.
-
require
명령을 사용하여 다음을 실행하십시오.composer require new/package
Composer는 사용할 최상의 버전 제약 조건을 추측하고 패키지를 설치 한 다음에 추가합니다
composer.lock
.다음을 실행하여 명시 적 버전 제약 조건을 지정할 수도 있습니다.
composer require new/package ~2.5
-또는-
-
update
명령을 사용하여 에 새 패키지를 수동으로 추가composer.json
한 후 다음을 실행하십시오.composer update new/package
Composer가 “요구 사항을 설치 가능한 패키지 세트로 해석 할 수 없습니다.”라는 메시지가 표시되면 플래그를 전달하여이를 해결할 수 있습니다 --with-dependencies
. 설치 / 업데이트하려는 패키지의 모든 종속성이 허용되지만 다른 종속성은 허용되지 않습니다.
Laravel 및 mcrypt와 관련하여 asker의 문제에 관한 질문 : CLI php.ini에서 제대로 활성화되어 있는지 확인하십시오. 경우 php -m
Mcrypt 라이브러리를 나열하지 않습니다 그것은 실종.
중요 : !를 사용할 때 반드시 지정하십시오 . 이 인수를 생략하면 모든 종속성과을 (를) 업데이트하게됩니다.new/package
composer update
composer.lock
답변
실제로 올바른 해결책은 다음과 같습니다.
composer require vendor/package
Composer 의 CLI 문서 에서 가져 왔습니다 .
이
require
명령composer.json
은 현재 디렉토리에서 파일에 새 패키지를 추가합니다 .
php composer.phar require
요구 사항을 추가 / 변경 한 후 수정 된 요구 사항이 설치되거나 업데이트됩니다.
대화식으로 요구 사항을 선택하지 않으려면 요구 사항을 명령에 전달하면됩니다.
php composer.phar require vendor/package:2.* vendor/package2:dev-master
composer update
composer.json에있는 새 패키지 를 설치 하는 것이 사실이지만 composer.json 에있는 퍼지 논리 ( 또는 콜론 뒤의 문자) 에 따라 composer.lock 파일과 설치된 패키지도 업데이트합니다 ! 이것은을 사용하여 피할 수 있지만 잠재적으로 깨진 프로젝트에서 잊어 버린 논쟁이기 때문에 습관을 들이지 않는 것이 좋습니다 …>
*
composer update vendor/package
composer require vendor/package
새로운 의존성을 추가하기 위해 제정신을 유지하십시오 ! ?
답변
내 유스 케이스는 더 단순하고 제목에 맞지만 세부 사항에는 맞지 않습니다.
즉 composer.json
, 다른 패키지를 모두 업데이트하지 않고 아직없는 새 패키지를 설치하고 싶습니다 .
여기에 해결책은 composer require x/y
답변
제 경우에는 다음과 같은 저장소를 가졌습니다.
- 요구 사항 A, B, C, D
.json
- 하지만 A, B, C 만
.lock
그 동안 A, B, C는 잠금 생성 시점과 관련하여 최신 버전을 사용했습니다.
어떤 이유로 나는 “공급 업체”를 삭제 composer install
하고 메시지를 표시하고 실패했습니다.
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.
Your requirements could not be resolved to an installable set of packages.
Seldaek에서 솔루션을 실행하려고 composer update vendorD/libraryD
했지만 작곡가가 더 많은 것을 업데이트해야한다고 주장 했으므로 .lock
내 변경 도구가 너무 많이 변경되었습니다.
내가 사용한 솔루션은 다음과 같습니다.
- 모든
vendors
디렉토리를 삭제하십시오 . - 에서 요구 사항
VendorD/LibraryD
을 일시적으로 제거합니다.json
. - 을 실행하십시오
composer install
. - 그런 다음 파일을 삭제
.json
하고 리포지토리 에서 파일 을 다시 체크 아웃 하십시오 (파일 을 다시 추가하는 것과 같지만 잠재적 인 공백 변경은 피함). - 그런 다음 Seldaek의 솔루션을 실행하십시오.
composer update vendorD/libraryD
그것은 라이브러리를 설치했지만, git
diff는 .lock
새로운 것들만 다른 것들을 편집하지 않고 추가 했다는 것을 보여주었습니다 .
(포인터에 대한 Thnx Seldaek;)