4. 의존성?
• 예를 들어면 이런겁니다.
• ‘A’라는 사람이 날짜 포멧을 변경하는 라이브러리를 만들었습니다.
• 당신은 ‘A’라는 사람이 만든 날짜 포멧 라이브러리를 이용해서 날
짜를 멋지게 표현하는 프로젝트를 완성했습니다.
• 자 그럼 당신이 만든 프로젝트는 ‘A’ 가 만든 날짜 포멧 라이브러리
가 반드시 필요하죠? 없으면 정상적으로 기능이 수행되지 않겠죠?
• 이것을 의존성이라고 말합니다.
5. Summary
• Composer는 앞서 말한 바와 같이 쉽게 의존성을 관리
해주는 도구입니다.
• Composer는 composer.json파일을 읽고 관련된 의
존성을 가지는 라이브러리를 모두 설치해줍니다.
• packagist.org를 저장소로 이용하여 의존성 정보를 수
집, 설치를 도와줍니다.
6. Install
• 커맨드 라인에서 다음 명령어를 실행합니다.
!
!
• Windows 환경일 경우
!
$ curl -sS https://getcomposer.org/installer | php
!
/* curl 이 없을경우 */
$ php -r “readfile(‘https://getcomposer.org/installer);” | php
c:bin>php -r “readfile(‘https://getcomposer.org/installer);” | php
!
/* windows 실행파일 생성 */
c:bin>echo @php “%~dp0composer.phar” %*>composer.bat
7. Install
• Install이 되면 composer.phar 파일이 생성 되어있을
겁니다.
• 이 파일이 Composer 실행 파일입니다.
• 사용의 편의성을 위해 “/usr/local/bin” 으로 이동시키
거나 alias 를 잡아두면 편하겠죠?
9. 디렉토리를 하나 만드세요.
그리고 그 디렉토리로 이동하여 composer.json파일을 생성합니다.
파일에 다음과 같이 작성해보세요.
{
“require”: {
“psr/log”: “1.0.0”
}
}
저장하시고 커맨드 라인에서 다음 명령어를 입력합니다
$ composer install
10. 그러면 Composer는 “psr/log” 라이브러리를
여러분이 생성한 디렉토리에 설치하게 됩니다.
!
해당 라이브러리는 “vendor/psr/log” 에서 확인하실 수 있습니다.
13. 1. 기본정보
해당 패키지에 대한 정보들을 표시 합니다.
패키지명, 설명, 저자, 라이센스등의 정보를 담습니다.
2. 의존성 관리
가장 중요한 부분입니다. 현재 패키지가 정상적인 기능을 하기 위해
필요한 라이브러리들을 명시합니다.
!
• require
형식은 다음과 같습니다.
“require”: {
“xmen/wolverine”: “1.0.0”,
“xmen/cycops”: “1.0.1”,
“xmen/storm”: “1.2.0”
}
14. 버전의 표기의 의미는 다음과 같습니다.
// 1.0 버전대의 최신 버전
“xmen/gambit”: “1.0.*”
!
// 1.0.0 버전보다 상위 버전만
“xmen/gambit”: “>1.0.0”
!
// 1.0.0 버전보다 하위 버전만
“xmen/gambit”: “<1.0.0”
!
// 1.0.0 버전 이거나 상위 버전인 것만
“xmen/gambit”: “=>1.0.0”
!
// 1.0.0 버전 이거나 하위 버전인 것만
“xmen/gambit”: “=<1.0.0”
!
// 1.0.0 버전보다 상위 버전이면서 1.0.2 버전보다 하위 버전
“xmen/gambit”: “>1.0.0,<1.0.2”
!
// >=1.1.2, <1.2 와 같은 의미
“xmen/gambit”: “~1.1.2”
!
// >=1.2, <2.0 과 같은 의미
“xmen/gambit”: “~1.2”
15. • require-dev
“require” 와 형식은 같습니다.
개발시에 필요한 라이브러리들을 명시합니다.
없어도 실제 기능에는 아무런 문제는 없습니다.
• conflict
“require” 와 형식은 같습니다.
기능상의 충돌등의 문제로 같이 존재해서는 안되는 라이브러리들을
명시합니다. 의존된 라이브러리에서 의존하는 경우 설치되지 않습니다.
16. 3. Auto Loading
Auto Loding 해야하는 파일 또는 디렉토리에 대한 내용을 명시합니다.
“autoload”: {
// 파일을 직접 지정
“files”: [
“path/to/my/firstfile.php”,
“path/to/my/secondfile.php”
],
// 디렉토리를 지정
“classmap”: [
“src/Models”,
“src/Controllers”
],
// psr-0 룰에 맞추어 경로를 재 지정
“psr-0”: [
“SuperHappyFunTime”: “src/“
]
}
psr-0에 대한 내용은
http://www.php-fig.org/psr/psr-0/ 에서 확인 하실 수 있습니다.
17. 4. Hook
Composer에 의해 명령이 실행되는 동안 수행할 명령어들을
작성할 수 있습니다.
“script”: {
“pre-install-cmd”: [
“php first command”,
“php second command”
]
}
Hook 처리하는 시점
• install 커맨드 실행 전, 후
• update 커맨드 실행 전, 후
• status 커맨드 실행 전, 후
• package Install, Uninstall 전, 후
• autoloader 에 dump 되기 전, 후
• root package 가 install 된 후
• archive 커맨드 실행 전, 후
• create-project 커맨드 실행 후
18. 5. 설정
Composer 설정 입니다.
timeout 이나 cache 등의 설정정보를 변경할 수 있습니다.
하지만 대채로 기본값을 사용하므로 변경할 요소가 크지 않습니다.
6. 저장소
Composer는 기본적으로 packagist.org에서 라이브러리를
찾고 다운로드 받아 설치 합니다.
하지만 사용자가 저장소를 지정하여 해당 저장소 라이브러리를 설치하게끔
할 수도 있습니다.
“repositories”: [
{
“type”: “vcs”,
“url”: “http://github.com/xpressengine/xe-core”
},
{
“type”: “package”,
“package”: {
“name”: “xpressengine/xe-core”,
“version”: “1.8.0”,
“dist”: {
“type”: “zip”,
“url”: “https://github.com/xpressengine/xe-core/archive/master.zip”
}
}
}
]
19. 참고사항
• install 이 실행되고 나면 composer.lock 파일이 생성
됩니다. 이 파일은 install 되어진 정보를 담고 있어 다음
composer 실행시 참고사항이 됩니다.
• composer.json 파일의 autoload 항목을 변경하면
autoload 갱신을 수행해야합니다.
$ composer dump-autoload
• getcomposer.org 에 방문하시면 더 많은 내용을 확인 할
수 있습니다.
20. 사설 저장소
구성요소중 “repositories” 항목을 이용하여 packagist.org 와 같은 저장
소를 구축할수 있습니다.
개요는 다음과 같습니다.
• 사설저장소로 사용될 서버가 필요합니다.
(사설저장소는 “xepackagist.org” 로 표현하겠습니다.)
• root 위치에 “packages.json” 파일이 반드시 있어야 합니다.
• 개별 프로젝트 root 에 존재하는 “composer.json” 파일에
“xepackagist.org”가 저장소로 명시 되어야 합니다.
• 저장소에는 라이브러리 패키지가 실제로 존재 하지 않아도 상관 없습니다.
21. 1. 서버 설정
서버의 document root 위치에 packages.json 파일을 작성합니다.
// 패키지의 정보 목록
{
“packages”: {
“vendor/package1”: {
“1.0.0”: {
“name”: “vendor/package1”,
“version”: “1.0.0”,
“dist”: {
“type”: “zip”,
“url”: “http://your_domain/path/to/file.zip”,
},
“source”: {
“type”: “git”,
“url”: “http://github.com/vendor/packages1.git”
}
}
},
“vendor/package2”: {
…………
}
}
}
22. • “name”, “version”, “dist” 나 “source” 는 패키지 정보를 구성
하는 필수 요소입니다.
• “dist”와 “source”요소는 두가지가 함께 명시되지 않아도 상관
없지만 반드시 하나는 명시되어야 합니다
• 명시된 패키지가 의존성이 있다면 “require” 항목으로 의존되는
패키지 정보를 포함하고 있어야 합니다.
• composer에서 제공하는 사설저장소 생성모듈인 “Satis”를 참
고 하시면 좋을 것 같습니다.
• https://github.com/composer/satis
23. 2. 개별 프로젝트 설정
프로젝트 root 위치에 composer.json 파일에 저장소를 추가합니다.
!
{
"name": "my/project",
"description": “repositories test project.”,
“repositories”: [
{
“type”: “composer”,
“url”: “http://xepackagist.org”
}
],
// 사설저장소에 명시된 패키지중 사용할 패키지를 선택하여 포함시킵니다.
"require": {
“xe/package1": “1.0.*”
}
}
24. 3. 기타
!
• 사설 저장소를 사용하는 곳으로는 대표적으로 wordpress 가 있습니
다.(http://wpackagist.org)
• packagist.org 의 패키지를 사용하고 싶지 않다면 repositories 항목
에 다음 처럼 작성하시면 됩니다.
!
“repositories”: [
{
“packagist”: false
}
]