2017-11-10 14 views
0

작곡가에게 symlink 로컬 패키지 을 강제 적용시키는 적절한 방법을 찾으려고합니다.작곡가가 로컬 패키지를 심볼릭 링크하도록 강요하십시오

나는 How to force Composer to download a local package?이라는 질문이 있지만 내 질문에 답하지 못한다는 것을 알고 있습니다. 이 작업을 CI 워크 플로에서 사용하기 때문에 예상대로 작동하는지 확인해야합니다.

갖는처럼 프로젝트의 composer.json :

{ 
    "name": "Sample package", 
    "version": "1.0.0" 
} 

이의 그렇게 가정 해 봅시다 :

{ 
    "name": "Some project", 
    "type": "project", 
    "minimum-stability": "dev", 
    "prefer-stable": true, 
    "repositories": [{ 
     "type": "path", 
     "url": "packages/*/*" 
    }] 
} 

그리고 패키지의 composer.json (패키지/샘플/패키지)

    (210)
  • sample/package:1.0.0은 packagist (aaaaaa 커밋)에 게시 - 로컬
  • sample/packagecomposer.jsonbbbbbb
  • 내가 version 1 명령 로컬

sample/package의를 수정할 수 없습니다 커밋에 체크 아웃 수정되지 않은과 :

$ composer require sample/package 

패키지는 f입니다. packagist에서 에칭 (버전 1.0.0, 커밋 aaaaaa).

명령 2 :

$ composer require sample/package:@dev 

패키지는 (심볼릭 링크, bbbbbb 커밋 버전 1.0.0) 공급 업체 디렉토리에 로컬 버전에서 심볼릭 링크됩니다.

질문은 다음과 같습니다

  1. minimum-stability 옵션에도 불구하고 packagist에서 명령 1 개 다운로드 패키지? 버전 제한 @dev을 사용하면 다른 안정성을 적용 할 수 있지만 이미 프로젝트 구성에서는 dev으로 내려갑니다.
  2. 명령 2 모든 경우에 로컬 패키지에 대한 심볼릭 링크를 만드시겠습니까?
  3. 명령 2보다 나은 방법으로 로컬 패키지에 심볼릭 링크가 적용되는지 확인하십시오.

답변

1

왜 명령 1은 최소 안정성 옵션에도 불구하고 패키지를 packagist에서 다운로드합니까? 버전 제약 조건 @dev는 다른 안정성을 적용 할 수있게하지만 이미 프로젝트 설정과 관련하여 개발자에게는 영향을 미치지 않습니다.

composer require sample/package에 버전 제약 조건이 제공되지 않으면 작곡가는 "prefer-stable": true으로 인해 안정적인 버전을 계속 찾으려고 시도합니다.이 옵션을 false으로 설정하거나 (패키지에 대해 명시 적으로 @dev 버전 제약 조건을 제공하는 경우) 최신 사용 가능한 버전 (커밋시 dev-masterbbbbbb)을 사용하여 작성자를 확인해야합니다.

명령 2는 모든 경우에 로컬 패키지에 대한 심볼릭 링크를 생성합니까?

모든 경우에 해당되는 것은 아닙니다. Composer가 항상 "symlink": true 옵션을 사용하여 패키지를 심볼릭 링크하도록 강제 할 수 있습니다. https://getcomposer.org/doc/05-repositories.md#path 가입일

: 가능하면

로컬

패키지는 이러한 경우에 본체의 출력으로부터 ../../packages/my-package 심볼릭 링크를 읽어, 심볼릭 링크한다. 심볼릭 링크가 가능하지 않으면 패키지가 복사됩니다. 이 경우 콘솔은 ../../packages/my-package에서 미러됨을 출력합니다.

기본 대체 전략 대신 심볼 링크를 "symlink": true 또는 미러링을 "symlink": false 옵션과 함께 사용할 수 있습니다. 미러링을 강제하는 것은 모 놀리 식 리포지토리에서 패키지를 배포하거나 생성 할 때 유용 할 수 있습니다.

로컬 패키지에 심볼릭 링크가 있는지 확인하려면 명령 2보다 더 좋은 방법이 있습니까?

"prefer-stable": truecomposer.json에서 삭제하면 모든 종속성에 영향을 미치므로 피해야합니다.

로컬 저장소의 경우 sample/package@dev 버전을 명시 적으로 요구하고 "symlink": true을 설정하는 것이 좋습니다. 결과는 다음과 같습니다.

{ 
    "name": "Some project", 
    "type": "project", 
    "minimum-stability": "dev", 
    "prefer-stable": true, 
    "repositories": [{ 
     "type": "path", 
     "url": "packages/*/*", 
     "symlink": true 
    }], 
    "require": { 
     "sample/package": "@dev" 
    } 

}