Laravel : 내부용 공통모듈은 composer + github
Composer + Github Repo(private)
내부에서 여러 프로젝트를 동시에 진행하는데, 서비스가 비슷하다 보니 같은 로직을 반복사용할때가 있다. 이럴때 composer 로 관리하고 싶은데 내부용 프로젝트라 packagist.org에는 공개하고 싶지 않다.
Satis라는 툴이 있지만 간단하게 사용하고 싶었는데 github를 이용해서도 된다고 한다.
사용자 라이브러리 생성
- 아무 폴더가 가서 my-first-library 처럼 대충 폴더를 만든다.
- 폴더로 들어가서 composer init을 하면 여러가지 질문이 나오는데,
이름 : vendor/package 식이다. ( mytest/my-first-library 처럼 입력한다.)
require : 이 패키지가 의존하는 다른 패키지를 나열한다. 여러개의 모듈로 되어 있거나, 다른 패키지를 의존한다면 적어주자. (package-name: 버젼값) 형식이다.
autoload : autoload로 앱구동시 라이브러리를 로딩하는 방법을 정의한다. namespace-prefix:directory 형식으로 namespace-prefix로 네임스페이스를 use선언하면 directory에서 파일을 찾는다는 의미이다
(“MyLibrary\”:“src”) 라고 선언한다면 MyLibrary\MyClass는 해당패키지폴더의 src\MyClass.php을 찾는다
{
"name": "mytest/my-first-library",
"description": "A simple library",
"type": "library",
"require": {},
"autoload": {
"psr-4": {
"MyLibrary\\": "src/"
}
}
}
- 위에서 src폴더를 지정했으니 src폴더를 만들고 간단한 소스를 만들어 보자.
MyFirstLibrary.php 이다.
<?php
namespace MyLibrary;
class MyFirstLibrary {
public function sayHello() {
return "Hello, World!";
}
}
- github에 현재 작업중인 폴더내용을 master에 올리자.
사용해보기
- 앞에서 github의 적당한 주소(https://github.com/my-repository-account/my-first-library)에 올렸으니 현재 프로젝트의 composer.json에 repository를 추가하자.
변경될 부분은 아래와 같다.
{
....
"require": {
....
"mytest/my-first-library": "master"
},
....
"repositories": [
{
"type": "vcs",
"url": "https://github.com/my-repository-account/my-first-library"
}
]
}
2.Private Repository를 이용할것이기 때문에 접속시 Token이 필요하다. 프로젝트 폴더에서 auth.json 을 만들고 github의 개인프로필에서 개발용 token 을 생성하여 토큰값을 적어보자
{
"github-oauth": {
"github.com": "ghp_D12345678asdfgh"
}
}
- 이제 composer insatll 혹은 composer update(실제 운영중인 프로젝트라면 update에 조심하자)를 하자
아래 처럼 패키지가 추가되고 vendor/mytest/ 하위에 파일들이 설치된것을 볼수있다.
.....
- Installing mytest/my-first-library (dev-master 010203c): Extracting archive
....
설치가 안되었다면 composer clear-cache 를 한에 다시 해보거나 composer install -vvv 로 로그를 확인해보자.
- 라라벨 controller나 기타 다른 곳에서 사용해보자.
use MyLibrary\MyFirstLibrary;
$lib = new MyFirstLibrary();
echo $lib->sayHello(); // 출력: Hello, World!
- 잘된다. 라이브러리 팀에서 라이브러리를 갱신하면 다시 composer update 하여 최신 버젼을 가져오도록 한다.
<?php
namespace MyLibrary;
class MyLibrary {
public function sayHello() {
return "Hello, World!";
}
public function toUpperCase(string $userData): string {
return strtoupper($userData);
}
}
composer update
- 사용할 곳에서 추가된 함수를 사용하면 된다.
$lib = new MyLibrary();
echo $lib->sayHello(); // 출력: Hello, World!
echo $lib->toUpperCase("dx-ninja");
담엔 Satis 를 이용해서 전용 서버에서 패키지 관리가 될수있도록 해보자.
0 comments:
댓글 쓰기