NPM 패키지의 종속성, devDependencies 및 peerDependencies의 차이점은 무엇입니까?json 파일?
이 문서는 제 질문에 대한 답변이 매우 부실합니다.저는 그 설명들을 이해하지 못했습니다.누가 더 간단한 말로 말할 수 있습니까?간단한 단어를 선택하는 것이 어렵다면 예를 들어볼까요?
peerDependencies
그것은 밀접한 관련이 있고 혼란을 일으킬 수 있습니다.
중요한 행동 차이 요약:
dependencies
두 가지 모두에 설치됩니다.npm install
package.json
npm install $package
devDependencies
다음과 같습니다.-
- 3.0 이전 버전:이(가) 누락된 경우 항상 설치되며, 서로 호환되지 않는 여러 버전의 종속성이 서로 다른 종속성에서 사용되는 경우 오류가 발생합니다.
- 3.0에서 시작할 것으로 예상됨(테스트되지 않음): 누락된 경우 경고 제공
npm install
의존성을 수동으로 해결해야 합니다.실행 중에 종속성이 누락된 경우 오류가 발생합니다(@nextgentech에서 언급됨).이것은 그것을 잘 설명합니다: https://flaviocopes.com/npm-peer-dependencies/ - 버전 7 피어에서는 자동으로 해결할 수 없는 업스트림 종속성 충돌이 없는 한 종속성이 자동으로 설치됩니다.
과도성(벤 허치슨이 언급):
dependencies
가 과도적으로 설치됩니다. A에 B가 필요하고 B에 C가 필요하면 C가 설치됩니다. 그렇지 않으면 B가 작동할 수 없고 A도 작동하지 않습니다.devDependencies
를 들어 수 있습니다예: A를 테스트하기 위해 B를 테스트할 필요가 없으므로 B의 테스트 종속성은 생략할 수 있습니다.
관련 옵션은 여기에 설명되지 않습니다.
bundledDependencies
이는 다음 질문에 대해 논의됩니다.npm의 일반 종속성에 비해 번들 종속성의 이점optionalDependencies
(에이든 펠드먼이 언급함)
개발 종속성
dependencies
하려면 를 입력해야 .devDependencies
단지 개발하기 위해, 예: 유닛 테스트, CoffeeScript에서 JavaScript로의 변환, 최소화, ...
패키를개예경다합니다드로운우통해할발를지예(다니).git clone
), , , 를package.json
실행:
npm install
실제 소스를 가지고 있기 때문에 개발하려는 것이 분명하므로 기본적으로 두 가지 모두dependencies
하기 (물론, 당신개위달하야때기문에고그려리가해을발은▁()▁(▁you그고))devDependency
종속성도 설치됩니다.
그러나 패키지를 사용하기 위해 패키지를 설치하려는 최종 사용자만 있는 경우 다음 디렉토리에서 수행합니다.
npm install "$package"
하는 데 한 것만 수 . dependencies
.
꼭 , ▁in▁if▁set▁develop다▁youment▁▁can니를 설정하면 됩니다.dev
: " " "true
명령행에서 다음과 같이 입력할 수 있습니다.
npm install "$package" --dev
은 옵은입니다.false
이것은 훨씬 덜 흔한 경우이기 때문에 기본적으로.
피어 종속성
(3.0 이전 버전에서 테스트됨)
출처: https://nodejs.org/en/blog/npm/peer-dependencies/
종속성을 할 수 . 종속성은▁inside▁▁with다▁simplys▁of설ency니▁it에 설치됩니다.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/
당신이 절대 언급하지 않아도 이런 일이 발생합니다.dependency3
의 신의에package.json
java.
제 생각에 이것은 컨트롤의 반전 디자인 패턴의 한 예입니다.
피어 종속성의 전형적인 예로는 호스트인 Grunt와 해당 플러그인이 있습니다.
예를 들어 https://github.com/gruntjs/grunt-contrib-uglify, 과 같은 Grunt 플러그인에서 다음과 같이 표시됩니다.
grunt
입니다.peer-dependency
- 한 사람
require('grunt')
아래에 있습니다.tests/
프로그램에서 실제로 사용하지 않습니다.
그런 다음 사용자가 플러그인을 사용할 때 암시적으로 플러그인이 필요합니다.Gruntfile
를 grunt.loadNpmTasks('grunt-contrib-uglify')
선, 하지만 그것은grunt
사용자가 직접 전화할 수 있습니다.
각 플러그인에 다른 Grunt 버전이 필요한 경우에는 이 기능이 작동하지 않습니다.
설명서
문서가 질문에 대한 답변을 상당히 잘 해준다고 생각합니다. 노드/기타 패키지 관리자에 대해 잘 모를 수도 있습니다.저는 루비 번들러에 대해 조금 알고 있기 때문에 아마 그것만 이해할 것입니다.
핵심 라인은 다음과 같습니다.
이러한 항목은 패키지의 루트에서 npm 링크 또는 npm 설치를 수행할 때 설치되며 다른 npm 구성 매개 변수처럼 관리할 수 있습니다.이 항목에 대한 자세한 내용은 npm-config(7)를 참조하십시오.
에서 "npm-config(7)"를 찾습니다.dev
:
Default: false
Type: Boolean
Install dev-dependencies along with packages.
를 설치하지 devDependencies를 할 수 .npm install --production
코드에서 호출하는 함수를 제공하는 라이브러리와 같이 프로젝트를 실행해야 하는 종속성입니다.
이들은 과도적으로 설치됩니다(A가 B에 의존하는 경우 C에 의존하는 npm 설치는 B와 C를 설치합니다).
예: lodash: 프로젝트에서 일부 lodash 함수를 호출합니다.
파일
코드를 가져와 자바스크립트, 테스트 프레임워크 또는 문서 생성기로 컴파일하는 컴파일러와 같이 개발 또는 릴리스 중에만 필요한 종속성입니다.
이들은 과도적으로 설치되지 않습니다(A가 B dev에 의존하고 C에 의존하는 경우, A의 npm 설치는 B만 설치합니다).
예: grunt: 프로젝트는 grunt를 사용하여 자체 빌드합니다.
파일
상위 프로젝트에서 프로젝트가 후크 또는 수정하는 종속성으로, 일반적으로 다른 라이브러리 또는 도구의 플러그인입니다.이는 상위 프로젝트(프로젝트에 따라 달라질 프로젝트)가 연결된 프로젝트에 종속되는지 확인하기 위한 검사입니다.그래서 당신이 B 라이브러리에 기능을 추가하는 C 플러그인을 만든다면, 프로젝트 A를 만드는 누군가가 C에 의존한다면 B에 의존해야 할 것입니다.
설치되지 않았습니다(npm < 3이 아닌 경우). 검사만 수행됩니다.
예: grunt: 프로젝트는 grunt에 기능을 추가하며 grunt를 사용하는 프로젝트에서만 사용할 수 있습니다.
이 문서에서는 피어 종속성에 대해 매우 잘 설명합니다. https://nodejs.org/en/blog/npm/peer-dependencies/
또한, npm 문서는 시간이 지남에 따라 개선되었으며, 이제 다양한 유형의 종속성에 대한 더 나은 설명을 제공합니다. https://github.com/npm/cli/blob/latest/docs/content/configuring-npm/package-json.md#devdependencies
예를 들어, mocha는 일반적으로 devDependency가 됩니다. 왜냐하면 테스트는 프로덕션에서 필요하지 않지만 express는 종속성이기 때문입니다.
패키지에 패키지를 저장합니다.json as dev 종속성:
npm install "$package" --save-dev
을 할 때npm install
다 됩니다.devDependencies
그리고.dependencies
설치방려devDependencies
선택사항:
npm install --production
일부 모듈과 패키지는 생산에 필요하지 않은 개발에만 필요합니다.설명서에 나와 있는 것처럼:
프로그램에서 모듈을 다운로드하여 사용하려는 경우 사용하는 외부 테스트 또는 문서 프레임워크를 다운로드하거나 구축할 필요가 없을 수 있습니다.이 경우 이러한 추가 항목을 devDependencies 해시에 나열하는 것이 가장 좋습니다.
peerDependencies
Ciro가 위에서 언급한 주제에 대한 블로그 게시물에서 이 스니펫을 읽을 때까지 저는 전혀 말이 되지 않았습니다.
[plugins]에 필요한 것은 플러그인과 해당 호스트 패키지 간의 이러한 "의존성"을 표현하는 방법입니다."호스트 패키지 버전 1.2.x에 연결되어 있을 때만 작동하므로 설치할 경우 호환되는 호스트와 함께 있는지 확인하십시오."라고 말합니다.이러한 관계를 피어 종속성이라고 합니다.
플러그인에 특정 버전의 호스트가 필요합니다...
peerDependencies
는 기능을 수행하기 위해 "호스트" 라이브러리가 필요하지만 최신 버전의 호스트가 릴리스되기 전에 작성되었을 수 있는 라이브러리인 플러그인용입니다.
제가 내, 가쓴다면라고 ,PluginX v1
위해서HostLibraryX v3
떠나도 ㅠㅠㅠㅠㅠㅠㅠㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜ.PluginX v1
다음 시간에 작동합니다.HostLibraryX v4
짝수)HostLibraryX v3.0.1
가 공개됩니다가 공개되었습니다.
하지만 플러그인은 호스트에 의존하지 않습니다...
플러그인의 관점에서는 호스트 라이브러리에 기능만 추가합니다.플러그인에 종속성을 추가하기 위해 호스트가 "필요"하지 않으며 플러그인은 종종 문자 그대로 해당 호스트에 의존하지 않습니다.호스트가 없는 경우 플러그인은 아무런 해를 끼치지 않습니다.
이것은 의미합니다.dependencies
플러그인에 적합한 개념이 아닙니다.
더 나쁜 것은, 내 호스트가 종속성처럼 취급된다면, 우리는 같은 블로그 게시물이 언급하는 이런 상황에 처하게 될 것입니다(이 답변의 구성된 호스트 및 플러그인을 사용하기 위해 약간 편집됨).
버전의 를 실행하고 있습니다.
npm install
치 않은 의성 예 상 못 생 니 합 다├── HostLibraryX@4.0.0 └─┬ PluginX@1.0.0 └── HostLibraryX@3.0.0
메인 애플리케이션과 다른 [HostLibraryX] API를 사용하는 플러그인에서 발생하는 미묘한 장애는 당신의 상상에 맡기겠습니다.
호스트는 플러그인에 의존하지 않는 것이 분명합니다.
그게 플러그인의 핵심입니다.호스트가 모든 플러그인에 대한 종속성 정보를 포함할 정도로 친절하다면 문제는 해결될 것입니다. 하지만 이는 또한 새로운 문화적 문제인 플러그인 관리를 야기할 것입니다.
플러그인의 요점은 익명으로 페어링할 수 있다는 것입니다.완벽한 세상에서 호스트가 모든 것을 관리하는 것은 깔끔하고 깔끔할 것입니다. 하지만 우리는 도서관에 고양이 무리를 요구하지는 않을 것입니다.
만약 우리가 계층적으로 의존하지 않는다면, 아마도 우리는 독립적인 동료일 것입니다.
대신, 우리는 또래라는 개념을 가지고 있습니다.호스트나 플러그인 모두 다른 호스트의 종속성 버킷에 있지 않습니다.둘 다 종속성 그래프의 동일한 수준에서 살고 있습니다.
하지만 이것은 자동화될 수 있는 관계가 아닙니다.<< 머니볼!!!
내가 만약에PluginX v1
의 피어(즉, 피어Dependency)를 기대합니다.HostLibraryX v3
그렇게 하겠습니다. 버전으로 HostLibraryX v4
(버전 4 참고) 그리고 다음이 있습니다.Plugin v1
설치되어 있습니다. 알고 계셔야 합니다. 그렇죠?
npm
수 . -- ▁can없제니습.
"이봐요, 당신이 사용하는 것이
PluginX v1
으로 다운그레이드를 하고 있습니다.HostLibraryX
v4에서 v3까지, kk?"
아니면...
"이봐요, 당신이 사용하는 것이
PluginX v1
그것은 예상합니다.HostLibraryX v3
당신이 마지막 업데이트를 하는 동안 먼지 속에 남겨두었던.으로 안을위자로제중는입다니거하전으를Plugin v1
!!1!
안 돼, NPM?!
don'snpm 그렇않습니다지은.이를 통해 상황을 알 수 있으며 다음과 같은 상황이 있는지 여부를 확인할 수 있습니다.HostLibraryX v4
는 에 적합한 피어입니다.Plugin v1
.
코다
좋아요.peerDependency
플러그인의 관리는 이 개념이 실제로 더 직관적으로 작동하도록 할 것입니다.블로그 게시물에서, 다시 한번...
한 가지 조언: 일반적인 종속성과는 달리 동료 종속성 요구사항은 관대해야 합니다.피어 종속성을 특정 패치 버전으로 제한해서는 안 됩니다.한 Chai 플러그인 피어가 Chai 1.4.1에 의존하고 다른 플러그인이 Chai 1.5.0에 의존한다면 정말 짜증날 것입니다. 단지 저자들이 게으르고 호환되는 Chai의 실제 최소 버전을 알아내는 데 시간을 보내지 않았기 때문입니다.
제가 좀 더 명확하게 이해할 수 있었던 간단한 설명은 다음과 같습니다.
앱을 배포할 때 모듈 종속성을 설치해야 합니다. 그렇지 않으면 앱이 작동하지 않습니다.devDependencies의 모듈은 운영 서버에서 개발하지 않으므로 해당 시스템에 설치할 필요가 없습니다.링크
저는 간단한 설명을 찾았습니다.
단답:
종속성은 "...프로젝트가 실제 운영 환경에서 작동하는 데 필요한 종속성입니다."
devDependencies는 "...개발 중에 필요한 것입니다."
peerDependencies "의존 관계로 사용할 수 있도록 사용자 라이브러리를 작성하고 게시하려는 경우"
자세한 내용은 다음 게시물을 참조하십시오. https://code-trotter.com/web/dependencies-vs-devdependencies-vs-peerdependencies
이러한 종속성 설명에 대한 제 견해를 답변에 추가하고 싶습니다.
dependencies
하거나, 보통 코드로 것 코드됩니다.devDependencies
빌드 프로세스, 엔드 코드가 종료되는 방법을 관리하는 데 도움이 되는 도구, 타사 테스트 모듈(예: 웹 팩 자료)에 사용됩니다.
요컨대
종속성 -
npm install <package> --save-prod
는 응용 프로그램에 필요한 패키지를 프로덕션 환경에 설치합니다.개발 종속성 -
npm install <package> --save-dev
및 합니다.냥그 기하입력을 입력합니다.
npm install
패키지에 언급된 모든 패키지를 설치합니다.제이손
로컬 컴퓨터에서 작업하는 경우 입력하십시오.npm install
그리고 계속합니다 :)
종속성 대 개발 종속성
개발 종속성은 개발 중에만 필요한 모듈이며 런타임에는 종속성이 필요합니다.응용 프로그램을 배포하는 경우 종속성을 설치해야 합니다. 그렇지 않으면 응용 프로그램이 작동하지 않습니다.프로그램을 실행할 수 있도록 하는 코드에서 호출하는 라이브러리는 종속성으로 간주될 수 있습니다.
Eg-Ract, React-dom
개발 중에만 필요한 자바스크립트, 테스트 프레임워크 및 문서 생성기에 코드를 은폐하는 컴파일러는 개발되지 않으므로 개발 서버에 설치할 필요가 없습니다.
Eg- ESLint, Babel, 웹팩
@참고로,
mod-a
dev-dependents:
- mod-b
dependents:
- mod-c
mod-d
dev-dependents:
- mod-e
dependents:
- mod-a
----
npm install mod-d
installed modules:
- mod-d
- mod-a
- mod-c
----
checkout the mod-d code repository
npm install
installed modules:
- mod-a
- mod-c
- mod-e
npm에 게시하는 경우 올바른 모듈에 올바른 플래그를 사용하는 것이 중요합니다.npm 모듈이 작동해야 하는 경우 "--save" 플래그를 사용하여 모듈을 종속성으로 저장합니다.모듈이 작동할 필요는 없지만 테스트에 필요한 경우 "--save-dev" 플래그를 사용합니다.
# For dependent modules
npm install dependent-module --save
# For dev-dependent modules
npm install development-module --save-dev
종속성: 프로젝트/패키지가 프로덕션에서 작동해야 하는 패키지입니다.
devDependencies: 프로젝트/패키지가 개발 중에 작동해야 하지만 프로덕션에 필요하지 않은 패키지(예: 테스트 패키지)
peerDependencies: 프로젝트/패키지가 함께("공동 작업") 또는 기본으로 작동해야 하는 패키지로, 주로 플러그인/구성요소를 개발할 때 플러그인/구성요소가 어떤 버전의 "기본" 패키지와 함께 작동해야 하는지 알려주는 데 유용합니다(예: React 16).
종속성
이러한 패키지는 패키지를 실행해야 하므로 사용자가 실행할 때 설치됩니다.
npm install PACKAGE-NAME
프로젝트에서 jQuery를 사용한 경우를 예로 들 수 있습니다.누군가 jQuery를 설치하지 않으면 작동하지 않습니다.종속성으로 저장하려면 사용
npm install --save
개발 종속성
이러한 종속성은 개발에서 사용하지만 사용자가 사용할 때 필요하지 않으므로 사용자가 실행할 때npm install
필요하지 않기 때문에 설치하지 않습니다.예를 들어 다음을 사용하는 경우mocha
테스트를 위해, 사람들은 필요하지 않습니다.mocha
달리려면, 그래서npm install
설치하지 않습니다.를 사용합니다.
npm install PACKAGE --save-dev
피어 종속성
이러한 라이브러리는 종속성으로 사용할 수 있도록 자신의 라이브러리를 만들고 게시하려는 경우에 사용할 수 있습니다.예를 들어 패키지를 다른 프로젝트에서 종속성으로 사용하려는 경우 다른 사용자가 프로젝트를 종속성으로 포함하는 프로젝트를 설치할 때 이러한 패키지도 설치됩니다.대부분의 경우 피어 종속성을 사용하지 않습니다.
npm 패키지를 배포할 때는 사용을 피해야 합니다.dependencies
대신에 이 데이터를 에 추가하는 것을 고려해야 합니다.peerDependencies
.
갱신하다
대부분의 시간 의존성은 여러분의 생태계를 설명하는 라이브러리들의 집합에 불과합니다.실제로 라이브러리의 특정 버전을 사용하는 경우가 아니라면 대신 해당 라이브러리를 설치할지 여부와 피어 종속성에 추가하여 선택할 버전을 사용자가 선택할 수 있도록 해야 합니다.
실행하려면 종속성이 필요하고, 개발하려면 devDependencies만 필요합니다.
웹 팩을 사용하여 프런트 엔드 애플리케이션을 번들하는 경우 종속성과 devDependencies 간의 차이가 명확하지 않습니다.최종 번들의 경우, 종속성을 어디에 두는지는 중요하지 않습니다(그러나 다른 툴에서는 중요할 수 있습니다).그것이 문서가 혼란스러워 보이는 이유입니다.
여기서 설명을 찾았습니다. 웹 팩을 사용할 때 "의존성"과 "개발 의존성"이 중요합니까?
언급URL : https://stackoverflow.com/questions/18875674/whats-the-difference-between-dependencies-devdependencies-and-peerdependencie
'programing' 카테고리의 다른 글
Ctrl-스페이스를 누르지 않은 이클립스의 Ctrl-스페이스 (0) | 2023.05.18 |
---|---|
BOM 없이 UTF-8로 엑셀 데이터를 내보낼 수 있습니까? (0) | 2023.05.18 |
UI 이미지 자르기 (0) | 2023.05.18 |
SQL Server JOIN에 NULL 값이 누락되었습니다. (0) | 2023.05.18 |
Mac OS X 10.8 / Xcode 4.4에서 gcc를 사용/설치하는 방법 (0) | 2023.05.18 |