[composer-php] Composer : 이전 종속성을 업데이트하지 않고 다른 종속성을 설치하려면 어떻게해야합니까?

몇 가지 종속성이있는 프로젝트가 있고 다른 프로젝트를 설치하고 싶지만 다른 프로젝트를 그대로 유지하고 싶습니다. 그래서를 편집 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"
}



답변

새 패키지를 설치하기 위해서는 두 가지 옵션이 있습니다.

  1. require명령을 사용하여 다음을 실행하십시오.

    composer require new/package
    

    Composer는 사용할 최상의 버전 제약 조건을 추측하고 패키지를 설치 한 다음에 추가합니다 composer.lock.

    다음을 실행하여 명시 적 버전 제약 조건을 지정할 수도 있습니다.

    composer require new/package ~2.5
    

-또는-

  1. update명령을 사용하여 에 새 패키지를 수동으로 추가 composer.json한 후 다음을 실행하십시오.

    composer update new/package
    

Composer가 “요구 사항을 설치 가능한 패키지 세트로 해석 할 수 없습니다.”라는 메시지가 표시되면 플래그를 전달하여이를 해결할 수 있습니다 --with-dependencies. 설치 / 업데이트하려는 패키지의 모든 종속성이 허용되지만 다른 종속성은 허용되지 않습니다.

Laravel 및 mcrypt와 관련하여 asker의 문제에 관한 질문 : CLI php.ini에서 제대로 활성화되어 있는지 확인하십시오. 경우 php -mMcrypt 라이브러리를 나열하지 않습니다 그것은 실종.

중요 : !를 사용할 때 반드시 지정하십시오 . 이 인수를 생략하면 모든 종속성과을 (를) 업데이트하게됩니다.new/packagecomposer updatecomposer.lock


답변

실제로 올바른 해결책은 다음과 같습니다.

composer require vendor/package

ComposerCLI 문서 에서 가져 왔습니다 .

require명령 composer.json은 현재 디렉토리에서 파일에 새 패키지를 추가합니다 .

php composer.phar require

요구 사항을 추가 / 변경 한 후 수정 된 요구 사항이 설치되거나 업데이트됩니다.

대화식으로 요구 사항을 선택하지 않으려면 요구 사항을 명령에 전달하면됩니다.

php composer.phar require vendor/package:2.* vendor/package2:dev-master

composer updatecomposer.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내 변경 도구가 너무 많이 변경되었습니다.

내가 사용한 솔루션은 다음과 같습니다.

  1. 모든 vendors디렉토리를 삭제하십시오 .
  2. 에서 요구 사항 VendorD/LibraryD을 일시적으로 제거합니다 .json.
  3. 을 실행하십시오 composer install.
  4. 그런 다음 파일을 삭제 .json하고 리포지토리 에서 파일 을 다시 체크 아웃 하십시오 (파일 을 다시 추가하는 것과 같지만 잠재적 인 공백 변경은 피함).
  5. 그런 다음 Seldaek의 솔루션을 실행하십시오. composer update vendorD/libraryD

그것은 라이브러리를 설치했지만, gitdiff는 .lock새로운 것들만 다른 것들을 편집하지 않고 추가 했다는 것을 보여주었습니다 .

(포인터에 대한 Thnx Seldaek;)


답변