저는 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"
}
"require-dev"
부분적으로 나타나는 것은 무엇이든composer install --dev
? 로만 다운로드 및 설치됩니다 .- 작곡가의 문서 일부를 읽었지만 여전히 우리가
"require-dev"
참여한 이유가 무엇인지 이해하지 못 합니까? 항상 최신 안정 버전을 얻기보다는 특정 버전 의 패키지 를 얻고 싶기 때문 입니까?
답변
다른 환경
일반적으로 소프트웨어는 다른 환경에서 실행됩니다.
development
testing
staging
production
서로 다른 환경에서 서로 다른 종속성
require
섹션 에서 선언 된 composer.json
종속성은 일반적으로 응용 프로그램이나 패키지를 실행하는 데 필요한 종속성입니다.
staging
production
반면 require-dev
섹션 에서 선언 된 종속성은 일반적으로
developing
testing
환경.
예를 들어, 실제로 응용 프로그램을 실행하는 데 사용되는 패키지 외에도 다음과 같은 소프트웨어 개발을 위해 패키지가 필요할 수 있습니다.
friendsofphp/php-cs-fixer
(코딩 스타일 문제 감지 및 수정)squizlabs/php_codesniffer
(코딩 스타일 문제 감지 및 수정)phpunit/phpunit
(테스트를 사용하여 개발 추진)- 기타
전개
이제 development
및 testing
환경에서 일반적으로
$ composer install
production
및 development
종속성을 모두 설치합니다 .
그러나 staging
및 production
환경에서는 응용 프로그램 실행에 필요한 종속성 만 설치하고 배포 프로세스의 일부로 일반적으로 다음을 실행합니다.
$ composer install --no-dev
production
종속성 만 설치합니다 .
의미론
즉, 섹션
require
require-dev
composer
실행할 때 설치해야하는 패키지 표시
$ composer install
또는
$ composer install --no-dev
그게 다입니다.
참고 애플리케이션 또는 패키지가 의존하는 패키지의 개발 종속성은 절대 설치되지 않습니다.
참고로 다음을 참조하십시오.
답변
-
작곡가 매뉴얼 에 따르면 :
require-dev (루트 전용)
이 패키지를 개발하거나 테스트를 실행하는 데 필요한 패키지를 나열합니다. 루트 패키지의 개발 요구 사항은 기본적으로 설치됩니다. 둘 다
install
또는 dev 종속성 설치를 방지update
하는--no-dev
옵션을 지원합니다 .따라서 실행
composer install
하면 개발 종속성도 다운로드됩니다. -
그 이유는 사실 아주 간단합니다. 특정 라이브러리에 기여할 때 테스트 스위트 또는 기타 개발 도구 (예 : 심포니)를 실행할 수 있습니다. 그러나이 라이브러리를 프로젝트에 설치하면 이러한 개발 종속성이 필요하지 않을 수 있습니다. 모든 프로젝트에 테스트 실행기가 필요한 것은 아닙니다.
답변
작곡가 사이트에서 (충분히 명확합니다)
필요 #
이 패키지에 필요한 패키지를 나열합니다. 이러한 요구 사항이 충족되지 않으면 패키지가 설치되지 않습니다.
require-dev (루트 전용) #
이 패키지를 개발하거나 테스트를 실행하는 데 필요한 패키지를 나열합니다. 루트 패키지의 개발 요구 사항은 기본적으로 설치됩니다. 설치 또는 업데이트 모두 dev 종속성 설치를 방지하는 –no-dev 옵션을 지원합니다.
Composer에서 require-dev를 사용하면 프로젝트 개발 / 테스트에 필요하지만 프로덕션에는 필요하지 않은 종속성을 선언 할 수 있습니다. 프로젝트를 프로덕션 서버에 업로드하면 (git 사용) require-dev
부분이 무시됩니다.
답변
섹션을 요구하는
이 섹션에서는 패키지 / 프로덕션 환경에 필요한 설치 될 더 나은 후보 / 있습니다 종속성이 포함되어 있습니다.
require-dev 섹션 : 이 섹션에는 개발자가 코드를 테스트하는 데 사용할 수있는 패키지 / 종속성이 포함되어 있습니다 (또는 로컬 컴퓨터에서 실험하고 이러한 패키지가 프로덕션 환경에 설치되는 것을 원하지 않음).
답변
일반적인 규칙은 로컬 환경과 같은 개발 (dev) 환경에서만 require-dev 섹션의 패키지를 원한다는 것입니다.
의 패키지 가 필요-dev에 섹션 등 당신이 응용 프로그램을 디버깅 도움 패키지, 테스트를 실행하다
에서 준비 및 생산 환경 당신은 아마에서 패키지 만 할 필요 절을 참조하십시오.
그러나 어쨌든 composer install –no-dev 및 composer update –no-dev 를 모든 환경에서 실행할 수 있으며 명령은 require-dev가 아닌 필수 섹션의 패키지 만 설치 하지만 스테이징 및 프로덕션 에서만 실행하고 싶을 것입니다. 로컬이 아닌 환경.
이론적으로는 모든 패키지를 require 섹션 에 넣을 수 있으며 아무 일도 일어나지 않지만 다음과 같은 이유로 프로덕션 환경에서 패키지를 개발하고 싶지 않습니다.
- 속도
- 디버깅 정보 노출 가능성
- 기타
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 으로 이동해야 합니다 .