Composer 빠른 시작
개술
현대 개발에서 많은 기능은 스스로 0부터 실현할 필요가 없다. 왜냐하면 이미 이런 기능을 실현한 사람이 있기 때문에 우리는 다른 사람이 쓴 코드를 가져와 설명에 따라 사용하면 된다.
자신의 코드에 비해 이들 남의 코드는 이른바 의존이나 제3자 라이브러리다.
분명히 수동으로 다른 사람에게서 코드를 복사하는 것은 번거로운 일이다. 특히 의존이 매우 많을 때이다.그리고 다른 사람의 코드는 더 많은 사람의 코드에 의존할 수 있다. 그러면 당신은 자신의 의존을 해결해야 할 뿐만 아니라 의존의 의존도 해결해야 한다!의심할 여지없이 이 중의 작업량은 매우 크다. 사람들은 프로젝트 의존(의존 의존 포함)을 원클릭으로 해결할 수 있는 도구가 절실하게 필요하기 때문에 관리 도구에 의존하여 생겨났다.
Composer는 PHP의 관리 도구입니다.그것 때문에 프로젝트에 의존을 쉽게 추가하고 삭제할 수 있으며, 프로젝트에서 이러한 의존을 인용하는 것도 매우 간단해진다.
다음은 의존적인 프로젝트를 관리하기 위해 Composer를 사용하는 프로젝트를 구축하는 데 도움을 줄 것입니다.
프로파일
프로젝트의 루트 디렉터리로 사용할 폴더를 새로 만들고 들어갑니다.
$ mkdir demo
$ cd demo
프로젝트 루트 디렉터리에 파일
composer.json
을 만듭니다. 이 파일은 프로젝트의 의존도와 다른 일부 메타데이터를 설명하는 데 사용됩니다.$ tree
.
└── composer.json
매우 중요한 필드는
require
인데, 대상 유형은 프로젝트에 필요한 의존도를 보여 줍니다.{
"require": {
"monolog/monolog": "1.0.*"
}
}
보시다시피,
require
아래의 모든 키 값은 의존을 의미합니다.키 값은 의존하는 패키지 이름과 대응하는 버전 두 부분의 정보를 포함한다. 키 이름은 패키지 이름이고 키 값은 사용할 버전이다.패키지 이름은 작성자 이름과 프로젝트 이름 두 부분으로 구성되며 중간에 사선/
으로 구분됩니다.앞의 예에서
monolog/monolog
의 버전을 1.0.*
로 지정합니다버전 번호는 다음과 같은 형태로 지정할 수 있습니다.
예제
설명
1.0.2
정확한 버전 번호.
>=1.0
>=1.0, <2.0
<=1.0|>=1.1
비교 범위.쉼표
,
는 논리와;세로선|
은 논리 또는.1.0.*
>=1.0.0, <=1.0.9
에 해당하며, 어댑터*
는 0-9의 숫자 중 하나일 수 있다.1.0 - 2.0
해당
>=1.0.0, <=2.0.0
~1.2.3
1.2.3 - 1.2.9
에 해당하는 최소 버전을 지정하여 마지막 숫자의 증가를 허용한다.^1.2.3
1.2.3 - 1.9.9
에 해당하는 버전으로 아래로 호환되는 업데이트를 허용합니다.설치 의존성
Composer
install
명령을 실행하면 프로필에 표시된 의존도가 설치되고 모든 패키지는 vendor
디렉터리에 저장됩니다.$ composer install
앞의 예를 들어
vendor/monolog/monolog/
디렉터리에서 monolog/monolog
의 원본 코드를 볼 수 있다.$ tree
.
├── composer.json
├── composer.lock
└── vendor
├── autoload.php
├── composer
└── monolog
└── monolog
Composer는 모든 작가를 위한 디렉터리를 따로 만들고, 작가 디렉터리 아래에 작가의 모든 항목을 위한 디렉터리를 따로 만듭니다.
처음
install
명령을 실행하면 Composer는 설치된 정확한 버전 번호를 파일composer.lock
에 기록하고 그 다음에 install
명령을 실행하면 Composer는 composer.lock
파일에 기록된 버전을 우선적으로 설치한다.의존도를 검사하고 업데이트해야 할 경우
composer update
명령을 사용할 수 있습니다.사용 의존
만약 Composer가 단지 다운로드, 저장, 업데이트 패키지일 뿐이라면, Composer는 큰 역할을 한다고 말할 수 없다.
Composer가 파일
vendor/autoload.php
을 생성했다는 것을 알 수 있습니다. 간단하게 include
이나 require
이 파일만 있으면 이 가방이 제공하는 클래스를 직접 사용할 수 있습니다.생성 파일
public/index.php
과 로그 파일storage/logs/app.log
의 현재 디렉토리 구조는 다음과 같습니다.$ tree
.
├── composer.json
├── composer.lock
├── public
│ └── index.php
├── storage
│ └── logs
│ └── app.log
└── vendor
├── autoload.php
├── composer
└── monolog
public/index.php
에 vendor/autoload.php
를 포함하고 로그 라이브러리의 클래스를 직접 실례화하여 로그를 기록합니다.// public/index.php
require __DIR__ . '/../vendor/autoload.php';
$log = new Monolog\Logger('app');
$log->pushHandler(
new Monolog\Handler\StreamHandler(
__DIR__ . '/../storage/logs/app.log',
Monolog\Logger::WARNING
)
);
$log->addWarning('Foo');
실행
monolog/monolog
을 실행하면 로그가 로그 파일에 성공적으로 쓰여진 것을 볼 수 있습니다.$ php public/index.php
$ cat storage/logs/app.log
[2018-10-01 12:04:16] app.WARNING: Foo [] []
작업 원리
Composer는 어떻게 제3자 클래스를 자동으로 불러올 수 있습니까?이는 PHP FIG의 자동 로드 사양인 PSR-4 덕분입니다.Composer가 제공한
public/index.php
파일은 이미 이러한 규범을 실현했다. 당신이 해야 할 일은 이러한 규범과 Composer에서 어떻게 사용하는지 이해하는 것이다.PSR-4의 핵심 사상은 최고급 명칭 공간을 특정한 디렉터리와 대응시켜 이 명칭 공간 아래의 모든 종류가 정확한 파일과 대응할 수 있도록 하는 것이다.예를 들어
vendor/autoload.php
클래스에 대해 최고급 이름 공간App\Http\Kernel
을 디렉터리App\
로 비추면 파일app/
에 app/Http/Kernel.php
클래스가 포함되어야 한다.파일 만들기
App\Http\Kernel
, 이 파일에 클래스 app/Http/Kernel.php
를 정의합니다.$ tree
.
├── app
│ └── Http
│ └── Kernel.php
├── composer.json
├── composer.lock
├── public
├── storage
└── vendor
// app/Http/Kernel.php
namespace App\Http;
class Kernel
{
//
}
파일
App\Http\Kernel
의 composer.json
필드에 새 필드autoload
를 추가합니다. 이 필드에 키 값 쌍을 추가합니다. 키 값은 psr-4
, 키 값은 App\\
입니다. 그러면 최상위 네임스페이스app/
를 디렉터리App\
로 비칩니다.{
"require": {
"monolog/monolog": "1.0.*"
},
"autoload": {
"psr-4": {
"App\\": "app/"
}
}
}
app/
\
파일
/
에서 반사대는 반드시 두 개를 써야 한다. json에서 반사대는 특수한 의미를 가지기 때문에 두 반사대는 반사대 자체를 나타낸다.주의해야 할 것은 성명 중의 경로
composer.json
는 파일app/
에 비해 그렇다는 것이다.예를 들어 composer.json
로그 라이브러리의 monolog/monolog
파일에서 다음과 같은 자동 마운트에 대한 설명을 찾을 수 있습니다.{
"autoload": {
"psr-0": {"Monolog": "src/"}
}
}
여기
composer.json
에 대응하는 것은 src/
디렉터리에 있는 vendor/monolog/monolog
디렉터리입니다.src
필드를 변경한 후 autoload
명령을 실행하여 Composer가 dump-autoload
파일을 다시 생성하도록 해야 합니다.$ composer dump-autoload
Generating autoload files
이후
vendor/autoload.php
류를 직접 사용할 수 있다.// public/index.php
require __DIR__ . '/../vendor/autoload.php';
// $log = new Monolog\Logger('app');
// $log->pushHandler(
// new Monolog\Handler\StreamHandler(
// __DIR__ . '/../storage/logs/app.log',
// Monolog\Logger::WARNING
// )
// );
// $log->addWarning('Foo');
$kernel = new App\Http\Kernel();
App\Http\Kernel
필드에는 autoload
필드를 제외하고 psr-4
, psr-0
, classmap
필드가 있는데 각각 PSR-0, 클래스 테이블, 파일 목록 자동 로드 방식에 대응한다.개발 시 의존
files
명령은 새로운 의존을 추가하는 데 사용됩니다.$ composer require "summerblue/generator:~0.5" --dev
옵션
require
은 개발할 때 사용할 의존을 나타낸다. 이것은 --dev
의 composer.json
필드에 나타날 것이다.{
"require-dev": {
"summerblue/generator": "~0.5"
}
}
require-dev
옵션을 가지고 --no-dev
명령을 실행하면 개발 의존도가 건너뜁니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.