Composer 빠른 시작

7063 단어

개술


현대 개발에서 많은 기능은 스스로 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에 해당하는 버전으로 아래로 호환되는 업데이트를 허용합니다.

    설치 의존성


    Composerinstall 명령을 실행하면 프로필에 표시된 의존도가 설치되고 모든 패키지는 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.phpvendor/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\Kernelcomposer.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은 개발할 때 사용할 의존을 나타낸다. 이것은 --devcomposer.json 필드에 나타날 것이다.
    {
        "require-dev": {
            "summerblue/generator": "~0.5"
        }
    }
    
    require-dev 옵션을 가지고 --no-dev 명령을 실행하면 개발 의존도가 건너뜁니다.

    좋은 웹페이지 즐겨찾기