[Composer] 외부 패키지를 마음대로 커스텀하기

 

PHP 의존성을 관리해주는 Composer를 사용하여 외부 패키지를 마음대로 수정 해 보자.

  • 각 언어마다 의존성 관리 툴이 있고, PHP에는 Composer라는 의존성 관리 툴이 있습니다.
  • Composer 명령어를 통해 외부 패키지를 자유롭게 가져다 쓸 수 있습니다.
  • 외부 패키지를 사용 할 때, 커스텀이 필요 할 때를 대비하여 어떻게 커스텀 하는지 알아봅니다.
  • require,install,update의 동작원리를 알아봅니다.

 

Composer Require,Install,Update

👉 우선 composer.json, composer.lock 파일 두개가 각각 어떤 용도로 사용되는지 먼저 알아봅니다.
        👍 composer.json : application에서 사용하는 패키지 리스트를 나타냅니다.
        👍 composer.lock : composer.json을 통해 설치된 패키지들의 의존성 정보와 버전을 기록합니다.

🧑🏻‍💻 Composer install :  
application에  composer.lock 파일이 있을 경우,
 패키지의 새 버전을 확인하는 대신 composer.lock 에 지정된 버전의 패키지를 설치합니다. 만약 파일이 없을 경우 정의된 composer.json 을 읽어서 의존성에 맞게 패키지를 검색하고 설치한 후에 의존성 정보와 버전을 composer.lock 파일에 기록합니다.

🧑🏻‍💻 Composer update :
update 명령어는 install 과는 달리 무조건 composer.json 을 파일을 읽고 허용하는 버전 범위내 새 버전이 있을 경우 설치하고 composer.lock 파일을 갱신합니다.

🧑🏻‍💻 Composer require :
composer.json에 새로운 패키지를 추가 후, 지정 패키지를 인스톨 합니다. 인스톨이 완료되면 해당 패키지의 의존성 정보와 버전을 composer.lock 파일에 기록합니다.

👉 모든 외부 패키지는 apllication/vendor 폴더 밑으로 설치됩니다.

 

외부패키지를 사용자 지정 폴더로 이동하여 커스텀 해보기

👉 위에서 언급한 것 처럼 application/vendor 폴더 밑으로 설치된 패키지를 아무리 커스텀 하여도, 여러가지 이유로 반영되지 않습니다. 로컬개발환경에서 적용 되더라도 git이나 서버 배포시, vendor폴더는 배제하고 composer.lock파일을 의존하여 새로운 vendor 폴더를 생성하기 때문에 초기화 되는 경우 등 때문입니다.

👉 때문에 처음 외부 패키지를 인스톨 할 때, 커스텀 용도로 사용할 패키지라면 이와 같은 방법을 통해 지정 폴더로 인스톨 후 커스텀 합니다.

 

참고 및 테스트 외부 패키지 선정

 

👉아래의 공식 문서를 참조하며 진행했습니다.

 

Repositories - Composer

Concepts Package Repository Types Composer packages notify-batch metadata-url, available-packages and available-package-patterns providers-api list provider-includes and providers-url cURL or stream options VCS Package Hosting your own Private Packagist Sa

getcomposer.org

 

👉외부패키지 테스트 용도로 binshops/laravel-blog를 선정하여 사용하였습니다.

 

GitHub - binshops/laravel-blog: Laravel Blog Package. Easiest way to add a blog to your Laravel website. A package which adds wo

Laravel Blog Package. Easiest way to add a blog to your Laravel website. A package which adds wordpress functionality to your website and is compatible with laravel 8. - GitHub - binshops/laravel-...

github.com

 

1. 최상위 디렉토리에 커스텀 폴더 생성 및 git clone

👉 저는 최상위 디렉토리에 [mingyu-components] 라는 폴더를 생성하였고, 그 아래 위 binshops/laravel-blog git clone하였습니다.

// 라라벨 폴더로 이동
$ cd laravel

// 앞으로 커스텀 패키지를 사용할 폴더 생성
$ mkdir mingyu-components

// 외부패키지 클론
$ cd mingyu-components
$ git clone https://github.com/binshops/laravel-blog.git

 

2. composer.json 설정 

👉 "repositories"의 path 설정 후 "require"에 명시해줍니다.

"repositories": [
        {
            "type": "path",
            "url": "./mingyu-components/binshops/laravel-blog"
        }
    ],
    
"require": {
        "php": "^7.3|^8.0",
        "binshops/laravel-blog": "*", // 위에 git clone 받은 버전으로 맞추기 때문에 * 처리
        "fruitcake/laravel-cors": "^2.0",
        "guzzlehttp/guzzle": "^7.0.1",
        "laravel/framework": "^8.75",
        "laravel/sanctum": "^2.11",
        "laravel/tinker": "^2.5",
        "laravel/ui": "^3.4"
    },

 

3. Composer update 실행 후 vendor의 심링크 확인

👉  맨 위에서 설명한 것 처럼, composer.json을 읽어 새로운 의존성 및 버전으로 lock파일을 생성하는 update 명령어를 실행합니다.

$ composer update

👉 설치가 완료되면 vendor/binshops로 이동하여 커스텀 폴더의 git clone으로 받은 패키지와 symbolic link가 연결됬는지 확인합니다.

$ cd laravel/vendor/binshops/
$ ls -al

 

4. 커스텀 패키지 폴더의 소스를 수정하여 반영되는지 확인합니다.

👉 아무 텍스트나 수정하여 결과값이 바뀌는지 확인합니다.

 

마무리

👉 배포시 커스텀 폴더 및 composer.json의 "repositories" 잘 명시되어있는지 확인하기.