NPM Package.json 파일의 종속성, DevDependencies 및 PeerDependencies의 차이점은 무엇입니까?
질문
이 문서는 내 질문에 매우 좋지 않습니다.나는 그 설명을 이해하지 못했습니다.누군가 더 간단한 단어로 말할 수 있습니까?단순한 단어를 선택하는 것이 어려울 경우 예제와 함께 일어날 수도 있습니다.
편집 또한 밀접하게 관련되어 있으며 혼란을 일으킬 수있는 peerdependencies를 추가했습니다.
답변
중요한 동작의 요약 :
종속성은 두 가지 모두에 설치됩니다. npm package.json이 포함 된 디렉토리에서 설치합니다 NPM은 다른 디렉토리에 $ 패키지를 설치합니다 devdependencies는 다음과 같습니다. -production 플래그 (GAYAN Charith의 답변 이동)를 전달하지 않는 한, Package.json이 포함 된 디렉토리에 NPM 설치에도 설치되었습니다. -dev 옵션을 제공하지 않는 한 NPM에 설치되지 않은 "$ PACKAGE"를 설치하지 마십시오. 이동 중이 아닙니다. peerdependencies : 3.0 이전 : 누락 된 경우 항상 설치되고 다른 종속성 버전의 종속성 버전이 다른 종속성에 의해 사용되는 경우 오류가 발생합니다. 3.0 (테스트되지 않은)에서 시작할 것으로 예상 : NPM 설치시 누락 된 경우 경고를주고 수동으로 종속성을 해결해야합니다. 실행 중일 때 종속성이 없으면 (@nextgentech가 언급 한 오류가 발생합니다. 버전 7 PeerDependencies는 자동으로 해결 될 수없는 상류 종속성 충돌이없는 경우가 아닌 경우 자동으로 설치됩니다. 용지성 (Ben Hutchison에서 언급) : 종속성이 이동합니다. 필요한 경우, B가 필요한 경우, B가 C를 필요로하는 경우, 그렇지 않으면 B가 작동하지 않으며 A. DevDependencies는 이동식이 아닙니다. 예를 들어, 우리는 B를 테스트하기 위해 B를 테스트 할 필요가 없으므로 B의 테스트 종속성을 그만 둘 수 있습니다.
관련 옵션은 여기에서 논의되지 않음 :
다음 질문에 대해 논의 된 번들 된 신뢰성 : NPM의 정상적인 종속성에 대한 번들의 이점 선택적 상세성 (Aidan Feldman이 언급)
devdependencies.
종속성은 발전, 예를 들어, 단위 테스트, 커피 스크립트를 JavaScript Transpilation, Minification, Minification에 개발하기 위해서만 실행해야합니다.
패키지를 개발하려는 경우 (예를 들어, Git Clone을 통해) Package.json이 포함 된 루트로 이동하여 다음을 실행합니다.
npm install
실제 소스가 있으므로 개발하려는 것은 분명합니다. 그래서 기본적으로 두 가지 종속성 (물론 개발을 위해 실행되므로 DevDependency 종속성이 설치되어 있어야합니다).
그러나 사용자는 패키지를 설치하기 위해 패키지를 설치하려는 최종 사용자 일 경우 디렉토리에서 수행 할 수 있습니다.
npm install "$package"
이 경우 일반적으로 개발 종속성을 원하지 않으므로 패키지 : 종속성을 사용하는 데 필요한 것을 얻을 수 있습니다.
이 경우 개발 패키지를 실제로 설치하려면 DEV 구성 옵션을 다음과 같이 명령 줄에서 TRUE로 설정할 수 있습니다.
npm install "$package" --dev
이 옵션은 기본적으로 훨씬 덜 일반적인 경우이므로 false입니다.
peerdependencies.
(3.0 이전에 테스트 됨)
출처 : https://nodejs.org/en/blog/npm/peer-dependencies/
정규 종속성을 사용하면 여러 버전의 종속성을 가질 수 있습니다. 그것은 간단히 종속성의 node_modules 안에 설치됩니다.
예를 들어,의존성 및 종속성의 2 가지 모두 다른 버전에서 의존성에 따라 프로젝트 트리가 보일 것입니다.
root/node_modules/
|
+- dependency1/node_modules/
| |
| +- dependency3 v1.0/
|
|
+- dependency2/node_modules/
|
+- dependency3 v2.0/
그러나 플러그인은 일반적 으로이 컨텍스트에서 호스트라고하는 다른 패키지가 필요하지 않은 패키지입니다.대신에:
플러그인은 호스트에서 필요합니다 플러그인은 호스트가 찾을 것으로 기대하는 표준 인터페이스를 제공합니다. 호스트 만 사용자가 직접 호출 할 수 있으므로 단일 버전이 있어야합니다.
예를 들어,종속성 및 종속성 피어의 종속성 3에 의존하는 경우, 프로젝트 트리는 다음과 같습니다.
root/node_modules/
|
+- dependency1/
|
+- dependency2/
|
+- dependency3 v1.0/
이는 Package.json 파일의 Dependency3을 언급하지 않더라도 발생합니다.
나는 이것이 제어 설계 패턴의 반전의 인스턴스라고 생각한다.
피어 의존성의 프로토 타입의 예는 그루트, 호스트 및 그 플러그인입니다.
예를 들어, https://github.com/gruntjs/grunt-contrib-uglify와 같은 그어 v 플러그인에서는 다음을 볼 수 있습니다.
그릴은 동료 의존성입니다 유일한 요구 ( '그릴')는 테스트 중입니까 / : 실제로 프로그램에서 사용하지 않습니다.
그런 다음 사용자가 플러그인을 사용할 때 그는 Grunt.loadNPMTasks ( '그려진 - 공예품 - Uglify') 라인을 추가하여 글자리 파일에서 플러그인을 암시 적으로 요구하지만 사용자가 직접 전화를 드리는 것은 그립니다.
각 플러그인이 다른 웅크 리고 버전이 필요한 경우에는 작동하지 않습니다.
수동
나는 문서가 질문에 답변 할 것으로 생각합니다. 노드 / 다른 패키지 관리자로 충분히 익숙하지 않은 것 같습니다.Ruby Bundler에 대해 조금 알고 있기 때문에 나는 그것을 이해할 것입니다.
키 줄은 다음과 같습니다.
이러한 것들은 패키지의 루트에서 NPM 링크 또는 NPM 설치를 수행 할 때 설치되며 다른 NPM 구성 매개 변수와 같이 관리 할 수 있습니다.주제에 대한 자세한 내용은 npm-config (7)를 참조하십시오.
NPM-config (7)에서 dev를 찾으십시오.
Default: false
Type: Boolean
Install dev-dependencies along with packages.
답변
DevDependencies를 설치하지 않으려면 NPM 설치 - 생산을 사용할 수 있습니다.
답변
의존성 프로젝트가 코드에서 호출하는 함수를 제공하는 라이브러리와 같이 프로젝트가 실행 해야하는 종속성입니다. 이들은 트리플 ロ (B에 의존하는 경우, B에 의존하는 경우, NPM 설치는 B 및 C가 B 및 C를 설치하는 경우)을 설치한다. 예 : Lodash : 프로젝트가 일부 Lodash 기능을 호출합니다.
devdependencies. 의존성은 코드를 취하여 JavaScript, 테스트 프레임 워크 또는 문서 생성기로 컴파일하는 컴파일러와 같은 개발 또는 해제 중에 만 필요합니다. 트리플 ロ (b deving에 의존하는 경우, C, NPM 설치에 의존하는 경우, B deaps에 의존하는 경우, b deaps에 의존하는 경우, npm 설치가 B에만 해당). 예 : Grunt : 프로젝트는 그 자체를 빌드하기 위해 그려진을 사용합니다.
peerdependencies. 프로젝트가 상위 프로젝트에서 연결되거나 수정되는 종속성, 일반적으로 다른 라이브러리 또는 도구의 플러그인상위 프로젝트 (프로젝트에 의존 할 프로젝트)가 연결 한 프로젝트에 대한 의존성이 있는지 확인하여 수표가되어야합니다.따라서 라이브러리 B에 기능을 추가하는 플러그인 C를 만드는 경우 프로젝트를 만드는 사람은 C에 종속성이있는 경우 B에 대한 종속성이 필요합니다. NPM <3 이상이 아니면 설치되지 않습니다. 예 : Grunt : 프로젝트는 untrumn에 기능을 추가하고 그릴을 사용하는 프로젝트에서만 사용할 수 있습니다.
이 설명서는 HTTPS://NODEJS.ORG/EN/BLOG/NPM/PEER-DEPENDENC/BLOG/NPM/PEER-DENECHUS/
또한 시간이 지남에 따라 NPM 문서가 개선되었으며 이제는 다양한 유형의 종속성에 대한 설명이 있습니다. https://github.com/npm/cli/blob/latest/docs/content/configuring-npm/package-json.md # devdependencies.
답변
예를 들어, 테스트가 생산에 필요하지 않으므로 표현이 종속적이지 않기 때문에 일반적으로 모카는 일반적으로 고발력이 될 것입니다.
답변
패키지에 패키지를 저장하려면 dev 종속성으로
npm install "$package" --save-dev
NPM 설치를 실행하면 devdependencies와 종속성을 모두 설치합니다.DevDependencies를 설치하지 않으려면 다음을 실행합니다.
npm install --production
답변
peerdependencies는 위에서 언급 한 주제의 주제에 대한 블로그 게시물 에서이 스 니펫을 읽을 때까지 나를 위해 감각을 느끼지 못했습니다.
[플러그인]은 플러그인과 호스트 패키지 사이에서 이러한 "종속성"을 표현하는 방법입니다."나는 내 호스트 패키지의 버전 1.2.x 버전에 꽂혀있을 때만 작동하므로, 당신이 나를 설치하면 호환되는 호스트와 함께 있는지 확인하십시오.우리는이 관계를 동료 의존성이라고 부릅니다.
플러그인은 특정 버전의 호스트를 기대합니다 ...
PeerDependencies는 "호스트"라이브러리가 필요한 "호스트"라이브러리가 필요한 라이브러리에 대한 기능을 수행하지만 최신 버전의 호스트 버전이 출시되기까지 한 번에 작성되었을 수 있습니다.
즉, hostlibraryx v3 용 PlugInx v1을 작성하고 hostlibraryx v4 (또는 hostlibraryx v3.0.1)가 해제 될 때 PlugInx V1이 작동하지 않습니다.
...하지만 플러그인은 호스트에 의존하지 않습니다 ...
플러그인의 관점에서는 호스트 라이브러리에만 기능 만 추가합니다.플러그인에 대한 종속성을 추가하기 위해 호스트를 "필요"하지 않으며 플러그인은 자주 문자 그대로 호스트에 따라 다릅니다.호스트가 없으면 플러그인은 무해하게 아무 것도하지 않습니다.
이것은 종속성이 실제로 플러그인에 대한 올바른 개념이 아니라는 것을 의미합니다.
나의 호스트가 종속성처럼 대우받은 경우, 우리는이 상황에서 동일한 블로그 게시물이 언급 한 것 (이 답변을 사용하기 위해 조금씩 편집 됨) :
그러나 이제 [HostLibraryX의 현대 버전을 PlugInx의 종속성으로 취급하면 NPM 설치를 실행하면 예기치 않은 종속성 그래프의 결과가 발생합니다. └─ hostlibraryx@4.0.0. └└ pluginx@1.0.0. └─ hostlibraryx@3.0.0. 나는 당신의 상상력에 대한 주요 응용 프로그램보다 다른 [hostlibraryx] API를 사용하여 플러그인에서 오는 미묘한 실패를 남겨 둘 것입니다.
... 그리고 호스트는 분명히 플러그인에 의존하지 않습니다 ...
... 그게 플러그인의 전체 요점입니다.이제 호스트가 모든 플러그인에 대한 종속성 정보를 포함 할만 큼 충분히 멋지 며 문제를 해결할 수 있지만 거대한 새로운 문화적 문제를 소개했습니다 : 플러그인 관리!
플러그인의 전체 지점은 익명으로 쌍을 이룰 수 있습니다.완벽한 세계에서 호스트를 관리하는 것은 모두 깔끔하고 깔끔한 것입니다. 그러나 우리는 도서관 무리 고양이가 필요하지 않습니다.
우리가 계층 적으로 의존하지 않으면 우리는 조장파 동료들에게 ...
대신, 우리는 동료가되는 개념을 가지고 있습니다.호스트 나 플러그인도 다른 의존성 버킷에 앉지 않습니다.둘 다 동일한 수준의 종속성 그래프에서 살아 있습니다.
...하지만 이것은 자동화 가능한 관계가 아닙니다.<<< Moneyball !!!
v1을 꽂고 (즉, 피어가있는 경우) hostlibraryx v3을 기대하면 그렇게 말할 것입니다.최신 hostlibraryx v4 (버전 4)로 자동 업그레이드되고 플러그인 v1이 설치되어 있으면 알아야합니다.
NPM은이 상황을 관리 할 수 없습니다 -
"이봐, 나는 플러그인 v1을 사용하고있다! v4에서 v3, kk에서 hostlibraryx를 자동으로 다운 그레이드합니다."
... 또는...
"이봐, 플러그인 v1을 사용하고있는 것을 알 수 있습니다. 마지막 업데이트 중에 먼지에 남아있는 HostLibraryX v3을 기대합니다. 안전하려면 Plugin V1을 자동으로 제거합니다 !! 1!
아니오, npm?!
그래서 npm은 그렇지 않습니다.상황에 알려줍니다. hostlibraryx v4가 플러그인 v1에 적합한 피어 인 경우 알아 내십시오.
코다
플러그인의 좋은 peerdependency 관리는이 개념이 실제로 더욱 직관적으로 작동하게 만듭니다.블로그 게시물에서 아직 다시 ...
한 가지 조언 : 정기적 인 종속성과 달리 피어 의존성 요구 사항은 관대해야합니다.피어 종속성을 특정 패치 버전으로 잠그면 안됩니다.Chai Plugin이 Chai 1.4.1에 또 하나의 Chai 1.4.1에 의존하는 경우 정말 성가시킬 것입니다. 다른 사람은 Chai 1.5.0에서 저자가 게으른 이유가 있고 실제 최소한의 차이 버전을 알아낼 시간을 보내지 않았기 때문입니다.호환 가능.
출처:https://stackoverflow.com/questions/18875674/whats-the-difference-between-dependencies-devdependencies-and-peerdependencies
최근댓글