분류 php

PHP Composer의 무엇, 왜, 어떻게

컨텐츠 정보

  • 조회 307 (작성일 )

본문

패키지 관리자 Laravel과 다른 프레임 워크가 사용하는 것을 이해하기 


개발자가 DRY 접근 방식의 장점과 이점을 인식했기 때문에 많은 프레임 워크와 라이브러리가 비공개적으로 공개 소스로 제작되었습니다.


당신이 나와 같은 사람이라면 (2 년 전 정확하게 말하면)이 새로운 프레임워크가 직접 .zip 다운로드를 허용하지 않는 이유는 무엇입니까? 그냥 프레임워크를 다운로드하겠습니까? "


CodeigniterCakePHP2를 사용하던 시절에는 .zip 파일을 다운로드하여 프로젝트 디렉토리에 압축을 풀고 개발을 시작했습니다. 깔끔한가요? 읽어.


그런 다음 2015 년에 새로운 버전의 CakePHP3을 목격했습니다 (불행히도 그 당시 Laravel을 시도하지 않았습니다). 프레임워크를 다운로드하기 위해 composer를 사용하도록 강요했고 매우 익숙했습니다. 시간과 두통이 나를 위해 얼마나 많은 시간을 절약 할 수 있는지 깨달을 때까지 다른 사람들처럼 불평하고 있었습니다.


https://dev.to/gauravmak/what-why-and-how-of-php-composer-21nc 


Composer 란? 


Composer는 PHP의 종속성 관리자이자 자동 로딩 전문가입니다. 


npm에 대해 들었거나 사용 했습니까? (혹은 yarn) 또는 당신이 루비스트라면, 번들러는 새로운 것이 아니어야 합니다. Composer는 PHP 세계에 유사한 기능을 제공합니다. 예전에는 PEAR (PHP Extension and Application Repository)였습니다.


여기서 주목해야 할 중요한 점은 오픈 소스 패키지는 일반적으로 Packagist를 따르고 작성기는 다른 위치를 지정하지 않는 한 거기에서 종속성을 다운로드 한다는 것입니다. Packagist는 Git / Svn 저장소의 코드를 유지하고 업데이트합니다. 또한 개인 packagist를 사용하거나 직접 호스팅하여 composer와 함께 개인 저장소를 사용할 수도 있습니다.


Composer가 고치는 고통 


다음은 Composer가 완화 한 몇 가지 고통입니다.


의존성 관리 


프레임워크를 사용하여 새 프로젝트를 작업 할 때는 업데이트에 의존합니다. 버그 수정 및 새로운 기능이 포함 된 새 버전을 출시 할 때 보안, 성능 및 기타 이유로 프레임워크를 업데이트 해야 합니다.


그러나 매번 수동으로 다운로드하고 기존 파일을 교체하고 다시 테스트하는 것은 고통스럽습니다. 시간이 걸린다. 이것이 더 이상 지원되지 않는 프레임워크의 버전에 의존하는 오래된 코드베이스가 너무 많은 이유입니다. 레거시 프로젝트 작업은 우리 모두가 피하려고 하는 것입니까?


프로젝트 디렉토리 크기 


composer 이전에는 프로젝트 디렉토리의 크기가 매우 컸습니다. 우리는 프로젝트가 의존하는 모든 라이브러리를 가지고 다니고 USB 스틱으로 프로젝트를 전달하거나 VCS (git) 히스토리를 오염시킵니다.


composer 입력-크기가 20 % 미만으로 줄어 듭니까? composer.lock 파일 덕분에 프로젝트 (.gitignore)의 종속성을 유지하지 않고도 버전 불일치를 피할 수 있습니다.


슬픈 사실-Codeigniter3은 여전히 ​​전통적인 다운로드 시스템을 사용합니다. 


디버깅 시간 


프로젝트에서 사용하는 라이브러리 또는 프레임워크는 다른 라이브러리에 따라 다릅니다 (그리고 체인은 계속됩니다 ...). 아마도 프레임 워크는 라이브러리의 버전 X를 사용하고 다른 라이브러리는 동일한 라이브러리의 버전 Y를 사용합니다.


충돌 또는 비 호환성으로 인해 오류가 발생했으며 문제의 기초에 도달하기 위해 많은 시간을 투자해야 합니다. 더 이상-작곡가는 적절한 버전의 라이브러리 사본을 하나만 유지하거나 설치 요청을 거부합니다.


자동 로딩 


긴 목록에는 진술이 필요하다는 것을 기억하십니까? 프로젝트의 규모가 커짐에 따라 각 파일에 포함해야 하는 파일 수가 늘어납니다. PHP 자동 로딩이 구해졌지만, 의존성이 커짐에 따라 설정 및 유지가 비교적 어렵습니다. 덜 설명 된 Composer의 강력한 기능은 자동 로딩입니다. PSR-0, PSR-4, 클래스 매핑 및 파일 자동로드를 지원합니다. 하나의 파일 만 있으면 됩니다. 간단한 네임 스페이스로 플레이하고 개발 시간을 즐기십시오.


덜 알려진 사실-Composer는 다양한 수준의 요구에 맞는 세 가지 수준의 자동 로더 최적화를 제공합니다. 


긴 설치 절차 


종종 설치 및 설치를 위해 라이브러리를 다운로드 한 후 하나 이상의 단계를 수행해야 합니다. 패키지 관리자는 설명서에 자세한 설치 절차를 작성하고 사용자가 따르지 않을 때 지원 쿼리에 응답 한 다음 오류에 대해 불평해야 했습니다. Composer 스크립트는 그들에게 유익합니다.


패키지 다운로드의 다양한 단계에서 자동화하고 스크립트로 실행할 수 있는 단계를 쉽게 코딩 할 수 있습니다. 예를 들어, Laravel은 composer 스크립트를 사용하여 .env 파일을 만들고, 응용 프로그램 키를 만들고, 패키지를 자동으로 검색합니다.


플랫폼 요구 사항 


라이브러리 / 패키지 코드는 최신 PHP 버전만 지원하거나 특정 PHP 확장에 따라 달라질 수 있습니다. 

또한 요구 사항을 충족하지 않는 시스템에서 패키지 다운로드를 방지 할 수 있도록 Composer에 알릴 수 있습니다. 

예를 들어

"require": {
    "php": "^7.1.3",
    "ext-mbstring": "*",
    "ext-openssl": "*",
    ...
},


이것을 composer.json에 추가하면 PHP가 v7.1.3 미만이거나 mbstring 및 openssl 확장자가 없는 시스템에서 패키지 다운로드를 시도하면 composer에서 오류가 발생합니다.


라이브러리 / 패키지 유지 


패키지 관리자는 중요한 업데이트가 있을 때마다 패키지 버전마다 다른 디렉토리를 유지 관리하거나 GitHub를 통해 새 버전을 릴리스 해야 했습니다. Composer와 VCS 태그 및 브랜치의 완벽한 통합 덕분에 커밋 및 푸시에 태그를 추가하기 만 하면 됩니다. 나머지는 처리됩니다.


Composer는 Semantic Versioning을 강력히 권장하며, 패키지 관리자는 배포에 대한 걱정 없이 실제 개발에 계속 집중할 수 있습니다.


Composer의 볼트와 너트 


이제 우리는 Composer의 무엇과 왜에 대한 아이디어를 얻었습니다. 방법 부분으로 넘어 갑시다.


설치 


작곡가 문서의 설치 지침은 매우 명확하며 최선의 작업은 귀하를 연결하는 것입니다.


소비 


Laravel을 사용하여 프로젝트를 빌드하려면 composer를 사용하여 프로젝트를 설치해야 합니다. 어떤 사람들은 전통적인 방식으로 가고 싶어하지만, 그것은 매우 낙담합니다.


라라벨 자체는 PHPUnit, Monolog, Carbon 등과 같은 유용한 오픈 소스 패키지를 많이 사용합니다. 이러한 의존성은 composer에 의해 관리됩니다. 잠재적인 문제를 피하려면 버전 관리에 대해 배워야 합니다.


Fun Fact-Composer는 기본적으로 공급 업체 디렉토리에 종속성을 설치하지만 다른 디렉토리에 의존성을 설치할 수 있는 다양한 패키지 유형에 대한 사용자 정의 설치 프로그램도 지원합니다. 


버전 관리 


composer.json 파일에 지정된 버전 제약 조건에 따라 composer가 라이브러리를 다운로드하는 방법을 이해하면 먼 길을 도울 수 있습니다. 원본 문서 기사를 한 번 이상 살펴 보는 것이 좋습니다.


알고 계십니까? -버전, 지점 또는 패키지별로 패키지를 요구할 수 있습니다. 특정 커밋 SHA로도 (권장되지 않음). 


개인적으로, 시맨틱 버전 관리 및 와일드 카드 버전 범위 (. *)를 사용하기 쉬운 패키지에는 Caret Version Range()를 사용하는 것이 좋습니다.


composer.lock 파일 이해 


composer.json은 create-project 명령을 사용하거나 터미널에서 직접 패키지를 요구할 때 자동으로 관리됩니다. composer.lock은 알고 있어야 합니다.


우선, composer.lock 파일을 커밋하여 팀 구성원 모두가 공통 프로젝트에서 작업하는 동안 동일한 종속성 사본을 사용하도록해야합니다. 어떻게 됩니까?


composer install을 실행할 때마다 Composer는 실제로 composer.lock 파일이 있는지 확인합니다. 존재하는 경우, 사용되는 정확한 버전 번호와 SHA를 포함하는 잠금 파일에 따라 모든 종속성을 설치합니다. 잠금 파일이 없으면 Composer는 단순히 composer.json 파일을 읽고 종속성을 설치하고 composer.lock 파일을 작성합니다. 다음에 서버 나 다른 컴퓨터에서 설치 명령을 실행할 때 잠금 파일은 동일한 사본을 제공하는 데 사용됩니다.


반면, composer update 명령은 composer.json 파일을 직접 보고 사용 가능한 경우 버전 제한에 따라 새 버전의 종속성을 설치하고 잠금 파일을 업데이트합니다.


Composer의 느림 


composer의 느린 설치 및 업데이트를 경험했습니다. 백그라운드에서 무슨 일이 일어나고 있는지 알 수 없으므로 다음 단계를 수행하기 전에 완료 될 때까지 화면을 계속 응시합니다.


같은 문제가 발생하면 --profile 및 -vv 또는 -vvv와 함께 composer 명령을 추가하여 백그라운드 처리에 대한 자세한 정보를 얻으십시오. 예를 들어

composer install -vv --profile


출력에서 특정 문제를 찾을 수 없는 경우 이 패키지를 사용하여 병렬 다운로드를 활성화 할 수도 있습니다.


패키지 개발 


첫 번째 패키지 / 라이브러리를 구축하기 시작한 경우 개발을 쉽고 편안하게 해주는 매우 유용한 팁이 있습니다.


대부분의 경우 패키지 / 라이브러리는 개발 과정에서 실제 프로젝트에 대해 테스트 해야 하며,이를 위해 관리자는 패키지가 실제 프로젝트 내부에 유지되어 불필요한 다중 릴리스가 완료 될 때까지 피해야 할 수도 있습니다.


라라벨의 슈퍼 장인 인 Caleb Porzio는 단일 명령으로 이 기능을 사용하기 위해 bash 별칭을 추가했습니다.


빠른 팁-패키지에 사용자에게 전달할 명령 줄 스크립트가 포함 된 경우 공급 업체 바이너리를 사용해보십시오. PHPUnit은 이를 사용하여 공급 업체 / bin / phpunit을 신속하게 실행할 수 있습니다. 


Branch Aliasis 


패키지 / 라이브러리가 이미 여러 프로젝트에서 사용되고 있는 경우 개발자의 생활을 좀 더 편하게 하기 위해 분기 별명을 추가하는 것도 고려해야 합니다. 이 기사는 그 이유를 잘 설명하고 그 방법을 지정합니다.


고급 레벨 개발자-Composer를 사용하면 composer-plugins를 사용하여 기능을 변경하거나 확장 할 수 있습니다. 패키지가 로드 될 때와 특정 이벤트가 발생할 때 작업을 수행 할 수 있습니다. 


최종 노트 


이것은 조금 더 길었다. 우리는 의존성 관리에 대한 빠른 역사를 다루고, Composer가 무엇인지 배우고, 그것이 고치는 고통에 대해 토론 한 다음, 새로운 개발자와 패키지 관리자에게 작곡가와 관련된 유용한 요점과 팁을 살펴 보았습니다.