[composer-php] composer.json에서 require와 require-dev 섹션의 차이점은 무엇입니까?

저는 composer를 사용하기 시작했습니다. 저는 그것에 대해 거의 알지 못하며 웹 애플리케이션 개발에 대한 경험이 거의 없습니다.

Nettuts + Tutorial살펴 보았 기 때문에 작곡가에 대한 기본적인 질문이 있습니다.

{
  "require": {
    "laravel/framework": "4.0.*",
    "way/generators": "dev-master",
    "twitter/bootstrap": "dev-master",
    "conarwelsh/mustache-l4": "dev-master"
  },
  "require-dev": {
    "phpunit/phpunit": "3.7.*",
    "mockery/mockery": "0.7.*"
  },
  "autoload": {
    "classmap": [
      "app/commands",
      "app/controllers",
      "app/models",
      "app/database/migrations",
      "app/database/seeds",
      "app/tests/TestCase.php"
    ]
  },
  "scripts": {
    "post-update-cmd": "php artisan optimize"
  },
  "minimum-stability": "dev"
}
  1. "require-dev"부분적으로 나타나는 것은 무엇이든 composer install --dev? 로만 다운로드 및 설치됩니다 .
  2. 작곡가의 문서 일부를 읽었지만 여전히 우리가 "require-dev"참여한 이유가 무엇인지 이해하지 못 합니까? 항상 최신 안정 버전을 얻기보다는 특정 버전 의 패키지 를 얻고 싶기 때문 입니까?



답변

다른 환경

일반적으로 소프트웨어는 다른 환경에서 실행됩니다.

  • development
  • testing
  • staging
  • production

서로 다른 환경에서 서로 다른 종속성

require섹션 에서 선언 된 composer.json종속성은 일반적으로 응용 프로그램이나 패키지를 실행하는 데 필요한 종속성입니다.

  • staging
  • production

반면 require-dev섹션 에서 선언 된 종속성은 일반적으로

  • developing
  • testing

환경.

예를 들어, 실제로 응용 프로그램을 실행하는 데 사용되는 패키지 외에도 다음과 같은 소프트웨어 개발을 위해 패키지가 필요할 수 있습니다.

  • friendsofphp/php-cs-fixer (코딩 스타일 문제 감지 및 수정)
  • squizlabs/php_codesniffer (코딩 스타일 문제 감지 및 수정)
  • phpunit/phpunit (테스트를 사용하여 개발 추진)
  • 기타

전개

이제 developmenttesting환경에서 일반적으로

$ composer install

productiondevelopment종속성을 모두 설치합니다 .

그러나 stagingproduction환경에서는 응용 프로그램 실행에 필요한 종속성 만 설치하고 배포 프로세스의 일부로 일반적으로 다음을 실행합니다.

$ composer install --no-dev

production종속성 만 설치합니다 .

의미론

즉, 섹션

  • require
  • require-dev

composer실행할 때 설치해야하는 패키지 표시

$ composer install

또는

$ composer install --no-dev

그게 다입니다.

참고 애플리케이션 또는 패키지가 의존하는 패키지의 개발 종속성은 절대 설치되지 않습니다.

참고로 다음을 참조하십시오.


답변

  1. 작곡가 매뉴얼 에 따르면 :

    require-dev (루트 전용)

    이 패키지를 개발하거나 테스트를 실행하는 데 필요한 패키지를 나열합니다. 루트 패키지의 개발 요구 사항은 기본적으로 설치됩니다. 둘 다 install또는 dev 종속성 설치를 방지 update하는 --no-dev옵션을 지원합니다 .

    따라서 실행 composer install하면 개발 종속성도 다운로드됩니다.

  2. 그 이유는 사실 아주 간단합니다. 특정 라이브러리에 기여할 때 테스트 스위트 또는 기타 개발 도구 (예 : 심포니)를 실행할 수 있습니다. 그러나이 라이브러리를 프로젝트에 설치하면 이러한 개발 종속성이 필요하지 않을 수 있습니다. 모든 프로젝트에 테스트 실행기가 필요한 것은 아닙니다.


답변

작곡가 사이트에서 (충분히 명확합니다)

필요 #

이 패키지에 필요한 패키지를 나열합니다. 이러한 요구 사항이 충족되지 않으면 패키지가 설치되지 않습니다.

require-dev (루트 전용) #

이 패키지를 개발하거나 테스트를 실행하는 데 필요한 패키지를 나열합니다. 루트 패키지의 개발 요구 사항은 기본적으로 설치됩니다. 설치 또는 업데이트 모두 dev 종속성 설치를 방지하는 –no-dev 옵션을 지원합니다.

Composer에서 require-dev를 사용하면 프로젝트 개발 / 테스트에 필요하지만 프로덕션에는 필요하지 않은 종속성을 선언 할 수 있습니다. 프로젝트를 프로덕션 서버에 업로드하면 (git 사용) require-dev부분이 무시됩니다.

또한 게시 한이 답변 확인 저자이 게시물 은 물론입니다.


답변

섹션을 요구하는
이 섹션에서는 패키지 / 프로덕션 환경에 필요한 설치 될 더 나은 후보 / 있습니다 종속성이 포함되어 있습니다.

require-dev 섹션 : 이 섹션에는 개발자가 코드를 테스트하는 데 사용할 수있는 패키지 / 종속성이 포함되어 있습니다 (또는 로컬 컴퓨터에서 실험하고 이러한 패키지가 프로덕션 환경에 설치되는 것을 원하지 않음).


답변

일반적인 규칙은 로컬 환경과 같은 개발 (dev) 환경에서만 require-dev 섹션의 패키지를 원한다는 것입니다.

의 패키지 가 필요-dev에 섹션 등 당신이 응용 프로그램을 디버깅 도움 패키지, 테스트를 실행하다

에서 준비생산 환경 당신은 아마에서 패키지 만 할 필요 절을 참조하십시오.

그러나 어쨌든 composer install –no-devcomposer update –no-dev 를 모든 환경에서 실행할 수 있으며 명령은 require-dev가 아닌 필수 섹션의 패키지 만 설치 하지만 스테이징프로덕션 에서만 실행하고 싶을 것입니다. 로컬이 아닌 환경.

이론적으로는 모든 패키지를 require 섹션 에 넣을 수 있으며 아무 일도 일어나지 않지만 다음과 같은 이유로 프로덕션 환경에서 패키지를 개발하고 싶지 않습니다.

  1. 속도
  2. 디버깅 정보 노출 가능성
  3. 기타

require-dev에 대한 좋은 후보 는 다음과 같습니다.

"filp/whoops": "^2.0",
"fzaninotto/faker": "^1.4",
"mockery/mockery": "^1.0",
"nunomaduro/collision": "^2.0",
"phpunit/phpunit": "^7.0"

위의 패키지가 수행하는 작업을 볼 수 있으며 프로덕션에서 왜 필요하지 않은지 알 수 있습니다.

여기에서 더 많은 것을보십시오 : https://getcomposer.org/doc/04-schema.md


답변

require-dev (루트 전용)에 유의하십시오. !

즉, require-dev 섹션은 패키지가 전체 프로젝트의 루트 일 때만 유효합니다. 즉 실행하면composer update 패키지 폴더에서 하는 .

자체 composer.json이있는 일부 주요 프로젝트 용 플러그인을 개발하는 경우 require-dev 섹션이 완전히 무시됩니다! 개발 종속성이 필요한 경우 require-dev 를 기본 프로젝트의 composer.json 으로 이동해야 합니다 .


답변