composer 업데이트와 composer 설치의 차이점은 무엇입니까?


답변:


296

작곡가 업데이트

composer update 에 명시된대로 귀하의 의존성을 업데이트합니다 composer.json

예를 들어이 패키지가 종속성으로 필요한 경우 :

"mockery/mockery": "0.9.*",

실제로 0.9.1패키지 버전을 설치 한 경우 실행 composer update하면이 패키지가 업그레이드됩니다 (예 : 0.9.2이미 릴리스 된 경우)

자세하게 composer update는 :

  • 읽다 composer.json
  • 더 이상 필요하지 않은 설치된 패키지 제거 composer.json
  • 필요한 패키지의 최신 버전이 있는지 확인하십시오
  • 최신 버전의 패키지 설치
  • composer.lock설치된 패키지 버전을 저장하도록 업데이트

작곡가 설치

composer install아무것도 업데이트하지 않습니다. composer.lock파일에 지정된 모든 종속성을 설치 합니다.

상세히:

  • composer.lock파일이 존재 하는지 확인하십시오 (없는 경우 실행 composer-update하여 작성하십시오).
  • composer.lock파일 읽기
  • composer.lock파일에 지정된 패키지를 설치 하십시오.

설치시기 및 업데이트시기

  • composer updatecomposer.json파일 에서 지정한 내용에 따라 프로젝트 패키지를 업그레이드하기 위해 주로 '개발 단계'에서 사용 됩니다.

  • composer install 주로 '배포 단계'에서 작성기 또는 테스트 환경에 응용 프로그램을 설치하는 데 사용되며, composer 업데이트로 작성된 composer.lock 파일에 저장된 동일한 종속성을 사용합니다.


5
잠금 파일이없고 composer 설치를 호출 할 경우 어떤 상태가 될지 설명하지 않았습니다. 좋은 설명 btw.
user1954544

1
언젠가 물릴 수도있는 중요한 것-잠금 파일은 재귀 적이 지 않습니다. 일부 패키지에 종속성이 느슨하게 정의되어 있고 깨끗한 시스템에서 프로젝트의 깨끗한 사본을 가져 오는 경우 새 버전의 버그가 있거나 변경 사항을 포함 할 수있는 다른 버전의 중첩 된 종속성이 설치 될 수 있습니다! 지속적인 통합 및 빌드 서버와 관련이 있습니다. 해결책-중첩 된 문제가있는 패키지를 찾고 json 및 lock 파일에 고정 버전을 추가하십시오.
JustAMartin

composer global update로컬 시스템 (에 글로벌 저장소에 업데이트 종속성 COMPOSER_HOMEENV 변수)
Yousha Aleayoub

1
그렇다면 프로덕션 서버에서 특정 패키지를 안전하게 업데이트하려면 어떻게해야합니까?
Michel

@Michel 먼저 composer update로컬 시스템에서 실행 하고 응용 프로그램을 테스트 한 다음 프로덕션 서버에 composer.lock을 업로드하고 실행해야합니다.composer install
Amin Shojaei

58

당신이 composer install그것을 실행할 때 잠금 파일을 찾고 그 안에 포함 된 것을 설치합니다, 그것을 찾을 수 없다면, 그것을 읽고 composer.json의존성을 설치하고 잠금 파일을 생성합니다.

실행할 composer update때 단순히을 읽고 composer.json종속성을 설치하고 잠금 파일을 업데이트하거나 새 잠금 파일을 작성하십시오.


23

composer install

  1. composer.lock존재하는 경우
    • composer.lock파일 에서 종속성을 처리하고 설치 합니다.
  2. 존재 composer.lock하지 않는 경우 .
    • 프로세스 패키지는에서 설치합니다 composer.json.
    • 작성 composer.lock설치된 패키지를 기반으로 파일을.

에 따라 : composer help install:

install 명령은 composer.lock현재 디렉토리에서 파일을 읽고 처리 한 후 해당 파일에 요약 된 모든 라이브러리 및 종속성을 다운로드하여 설치합니다. 파일이 존재하지 않으면 찾아서 composer.json동일한 작업을 수행합니다.


composer update

  1. composer.json파일의 종속성을 처리 합니다 (설치, 업데이트 및 제거).
  2. composer.lock변경 사항에 따라 파일을 작성 하거나 업데이트합니다 .

에 따라 : composer help update:

update 명령은 composer.json현재 디렉토리에서 파일을 읽고 처리하며 모든 종속성을 업데이트, 제거 또는 설치합니다.


참조 : 작곡가 : 그것은의 모두 잠금 파일에 대한


작곡가 설치 지점 3은 의미가 없습니다. .lock 파일이 이미 존재하면 파일을 읽고 "업데이트"하지 않습니다. 아직 존재하지 않는 경우에만 생성됩니다.
Ben

@Ben은 요점을 명확히 했으므로 지금 이해가되는지 알려주십시오.
kenorb

3

사이의 최적의 차이 composer updatecomposer install

작곡가 설치

종속성을 추가하려면 composer.json 파일에 수동으로 추가해야합니다.

composer.lock 파일이 존재하면이 파일에 지정된 것을 정확하게 설치하십시오

  • 그렇지 않으면 composer.json 파일을 읽고 어떤 종속성을 설치해야하는지 확인하십시오.
  • 프로젝트 정보 (설치된 종속성)로 composer.lock을 작성하십시오.

이 명령으로 어떤 구성 요소도 업데이트되지 않습니다.

작곡가 업데이트

종속성을 추가하거나 제거하려면 composer.json 파일에 수동으로 추가해야합니다.

  • composer.lock 파일은 무시됩니다
  • composer.json 파일 종속성이 설치 및 업데이트됩니다 (종속성이 설치되지 않은 경우 다운로드 됨)

composer.json 파일을 수동으로 수정하거나 수정할 수없는 경우 (또는 실제로 쉬운 라이브러리를 추가하거나 제거하는 방법을 모르는 경우 종속성 및 버전 이름을 파일의 require 특성에 추가) 대신 커맨드 라인을 사용하는 것이 좋습니다. 작곡가는 이것을 위해 특별한 기능을 가지고 있습니다 :

작곡가 필요

예를 들어 커맨드 라인에 의존성을 추가하려면 간단히 실행합니다.

composer require twig/twig

  • composer.json 파일이 자동으로 수정되고 새로운 종속성이 추가됩니다
  • 종속성이 프로젝트에 다운로드됩니다

작곡가 제거

사용하지 않는 의존성을 제거하려면 간단히 다음을 실행합니다.

composer remove twig/twig --update-with-dependencies

  • 나뭇 가지는 그의 모든 의존성과 함께 제거됩니다

1

작곡가 설치

if(composer.lock existed){
   installs dependency with EXACT version in composer.lock file
} else {
   installs dependency with LATEST version in composer.json
   generate the composer.lock file
}

작곡가 업데이트

composer update = remove composer.lock -> composer install

왜 우리는 두 가지 명령이 필요합니다. composer.lock으로 설명 할 수 있다고 생각합니다.

상상, 우리는 하지 마십시오composer.lock와의 composer.json종속성이 "monolog/monolog": "1.0.*"또는 "monolog/monolog": "^1.0".
그런 경우가 있습니다.

  • 우리는 오늘 현재 의존성 버전 (예 : 1.0.0)으로 잘 작동하지만 몇 개월 후에 의존성 업데이트 (예 : 1.0.1)와 버그가있을 수 있습니다
  • 다른 팀 구성원이 composer install다른 시간에 실행 되는 경우 다른 종속성 버전을 가질 수 있습니다 .

우리가 항상 composer.json같은 정확한 버전을 사용한다면 "monolog/monolog": "1.0.1"어떨까요?
우리는 여전히 의존성의 주 버전을 추적 composer.lock하기 때문에 composer.json의존성의 종속성 버전을 추적 할 수 없기 때문에 여전히 필요합니다 .

모든 종속성 종속성이 EXACT 버전도 사용하는 경우 어떻게됩니까?
EXACT 버전을 사용하는 모든 종속성으로 시작한 다음 신경 쓰지 않는다고 상상해보십시오 composer.lock. 그러나 몇 달 후 새로운 종속성을 추가하거나 오래된 종속성을 업데이트하면이 종속성의 종속성이 EXACT 버전을 사용하지 않습니다. 그런 다음 composer.lock처음 에 관리하는 것이 좋습니다 .

게다가 정확한 버전보다 의미 버전의 장점이 있습니다. 개발하는 동안 종속성을 여러 번 업데이트 할 수 있으며 라이브러리에는 종종 버그 수정과 같은 약간의 변경 사항이 있습니다. 그런 다음 시맨틱 버전을 사용하는 종속성을 업그레이드하는 것이 더 쉽습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.