질문 : npm package.json 파일의 종속성, devDependencies 및 peerDependencies의 차이점은 무엇입니까?
이 문서는 내 질문에 대한 답이 매우 부족합니다. 나는 그 설명을 이해하지 못했습니다. 누군가 더 간단한 말로 말할 수 있습니까? 간단한 단어를 고르기가 어렵다면 예를 들어 보시겠습니까?
EDIT 는 또한 밀접하게 관련되어 혼란을 일으킬 수있는 peerDependencies
답변
중요한 동작 차이 요약 :
dependencies
은 둘 다에 설치됩니다.package.json
이 포함 된 디렉토리에서npm install
- npm은 다른 디렉토리에
npm install $package
devDependencies
는 다음과 같습니다.--production
플래그를 전달하지 않는 한package.json
을 포함하는 디렉토리npm install
에도 설치됩니다 (Gayan Charith의 답변에 찬성 투표 ).- npm에 설치되지 않음
--dev
옵션을 지정하지 않는 한 다른 디렉토리에npm install "$package"
- 전 이적으로 설치되지 않습니다.
peerDependencies
:- 3.0 이전 : 누락 된 경우 항상 설치되고 서로 다른 종속성에서 호환되지 않는 여러 버전의 종속성을 사용할 경우 오류가 발생합니다.
- 3.0에서 시작할 것으로 예상 됨 (예상
npm install
누락 된 경우 경고를 표시하고 수동으로 종속성을 해결해야합니다. 실행할 때 종속성이 없으면 오류가 발생합니다 ( @nextgentech에서 언급 함). - 버전 7 에서는 자동으로 해결할 수없는 업스트림 종속성 충돌이 없으면 peerDependencies가 자동으로 설치됩니다.
- Transitivity (Ben Hutchison에 의해 언급 됨) :
dependencies
은 전 이적으로 설치됩니다. A에 B가 필요하고 B에 C가 필요하면 C가 설치되고, 그렇지 않으면 B가 작동하지 않고 A도 작동하지 않습니다.devDependencies
는 전 이적으로 설치되지 않습니다. 예를 들어 A를 테스트하기 위해 B를 테스트 할 필요가 없으므로 B의 테스트 종속성을 생략 할 수 있습니다.
여기에서 논의되지 않은 관련 옵션 :
- 다음 질문에서 논의되는
bundledDependencies
: npm의 일반 종속성에 대한 bundledDependencies의 장점 optionalDependencies
( Aidan Feldman이 언급 함)
devDependencies
dependencies
은 실행에 필요하며 devDependencies
는 개발에만 필요합니다. 예 : 단위 테스트, CoffeeScript에서 JavaScript 로의 변환, 축소, ...
패키지를 개발하려면 다운로드 (예 : git clone
package.json
이 포함 된 루트로 이동하여 다음을 실행합니다.
npm install
실제 소스가 있으므로 개발하려는 것이 분명하므로 기본적으로 dependencies
(물론 개발하려면 실행해야하기 때문에)과 devDependency
종속성도 설치됩니다.
그러나 패키지를 설치하여 사용하려는 최종 사용자 일 경우 모든 디렉토리에서 수행합니다.
npm install "$package"
이 경우 일반적으로 개발 종속성을 원하지 않으므로 패키지를 사용하는 데 필요한 dependencies
을 얻습니다.
이 경우 개발 패키지를 실제로 설치하려면 다음과 같이 명령 줄에서 dev
구성 옵션을 true
npm install "$package" --dev
이 옵션은 훨씬 덜 일반적인 경우이므로 기본적으로 false
peerDependencies
(3.0 이전 테스트)
출처 : https://nodejs.org/en/blog/npm/peer-dependencies/
일반 종속성을 사용하면 여러 버전의 종속성을 가질 수 있습니다. 종속성 node_modules
예를 들어 dependency1
과 dependency2
모두 dependency3
에 의존하는 경우 프로젝트 트리는 다음과 같습니다.
root/node_modules/
|
+- dependency1/node_modules/
| |
| +- dependency3 v1.0/
|
|
+- dependency2/node_modules/
|
+- dependency3 v2.0/
그러나 플러그인은 일반적으로이 컨텍스트 에서 호스트 라고하는 다른 패키지를 필요로하지 않는 패키지입니다. 대신 :
- 플러그인은 호스트에 필요합니다.
- 플러그인은 호스트가 찾을 것으로 예상하는 표준 인터페이스를 제공합니다.
- 호스트 만 사용자가 직접 호출하므로 단일 버전이 있어야합니다.
예를 들어 dependency1
및 dependency2
피어가 dependency3
경우 프로젝트 트리는 다음과 같습니다.
root/node_modules/
|
+- dependency1/
|
+- dependency2/
|
+- dependency3 v1.0/
package.json
파일에서 dependency3
을 언급하지 않은 경우에도 발생합니다.
나는 이것이 Inversion of Control 디자인 패턴의 예라고 생각합니다.
피어 종속성의 전형적인 예는 Grunt, 호스트 및 해당 플러그인입니다.
예를 들어 https://github.com/gruntjs/grunt-contrib-uglify 와 같은 Grunt 플러그인에서는 다음을 볼 수 있습니다.
grunt
는peer-dependency
- 유일한
require('grunt')
는tests/
: 실제로 프로그램에서 사용되지 않습니다.
사용자가 플러그인을 사용할 때 다음, 그는 암시에서 플러그인이 필요합니다 Gruntfile
추가하는 것으로 써 grunt.loadNpmTasks('grunt-contrib-uglify')
라인 만의 grunt
사용자가 직접 호출 할 것이다.
각 플러그인에 다른 Grunt 버전이 필요한 경우에는 작동하지 않습니다.
메뉴얼
나는 문서가 질문에 아주 잘 대답한다고 생각합니다. 아마도 당신은 노드 / 다른 패키지 관리자에 익숙하지 않을 것입니다. Ruby 번 들러에 대해 조금 알고 있기 때문에 이해할 수있을 것입니다.
핵심은 다음과 같습니다.
이러한 것들은 패키지의 루트에서 npm 링크 또는 npm 설치를 수행 할 때 설치되며 다른 npm 구성 매개 변수처럼 관리 할 수 있습니다. 주제에 대한 자세한 내용은 npm-config (7)를 참조하십시오.
그런 다음 npm-config (7) 아래에서 dev
찾으십시오.
Default: false
Type: Boolean
Install dev-dependencies along with packages.
출처 : https://stackoverflow.com/questions/18875674/whats-the-difference-between-dependencies-devdependencies-and-peerdependencies
'개발관련 > other' 카테고리의 다른 글
Swift에서 배열을 연결하거나 병합하는 방법 (0) | 2021.12.11 |
---|---|
OpenSSL을 사용하여 자체 서명 된 SSL 인증서를 생성하는 방법 (0) | 2021.12.11 |
Assembly 파일 버전을 확인하는 방법 (0) | 2021.12.09 |
Authentication vs Authorization 웹 애플리케이션 컨텍스트의 차이점 (0) | 2021.12.09 |
Login failed for user 'IIS APPPOOL\ASP.NET v4.0' (0) | 2021.12.09 |