복붙노트

[NODEJS] NPM package.json 파일에 종속 devDependencies 및 peerDependencies의 차이점은 무엇입니까?

NODEJS

NPM package.json 파일에 종속 devDependencies 및 peerDependencies의 차이점은 무엇입니까?

해결법


  1. 1.중요한 행동의 차이의 요약 :

    중요한 행동의 차이의 요약 :

    관련 옵션은 없습니다 여기에 설명 :

    의존성, devDependencies는 개발, 실행 커피 스크립트 자바 스크립트 transpilation, 축소를에 예컨대 : 단위 테스트를해야합니다 ...

    패키지를 개발하기 위하여려고하는 경우에, 당신은 package.json하고 실행을 포함 루트로 이동 그것은 (예를 들어를 통해 자식 클론)를 다운로드 :

    npm install
    

    당신이 실제 소스를 가지고 있기 때문에, 모두 의존성 (당신은 물론, 실행을 개발하기 위해해야하기 때문에)와 devDependency 종속성도 설치되므로 기본적으로, 당신이 그것을 개발하려는 것이 분명하다.

    그러나, 당신은 단지 그것을 사용하는 패키지를 설치하고자하는 경우에만 최종 사용자 인 경우, 당신은 어떤 디렉토리에서 할 것입니다 :

    npm install "$package"
    

    종속 관계 : 그냥 패키지를 사용하는 데 필요한 것을 얻을 수 있도록이 경우에는 일반적으로 개발 종속성을 원하지 않는다.

    당신이 정말로 그 경우에 개발 패키지를 설치하려는 경우, 당신은 명령 줄에서 가능성이 true로 dev에 구성 옵션을 설정할 수 있습니다 :

    npm install "$package" --dev
    

    이 훨씬 덜 일반적인 경우이기 때문에이 옵션은 기본적으로 false입니다.

    (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/
    

    플러그인은, 그러나, 일반적으로 이러한 맥락에서 호스트라고 다른 패키지를 필요로하지 않는 패키지입니다. 대신 :

    예를 들면 의존성과 종속성이 피어의 의존성 3에 따라, 프로젝트 트리처럼 보일 것이다 :

    root/node_modules/
                     |
                     +- dependency1/
                     |
                     +- dependency2/
                     |
                     +- dependency3 v1.0/
    

    당신은 결코 당신의 package.json 파일에 dependency3을 언급하지 않습니다하지만이 경우에도 발생합니다.

    나는이 컨트롤 디자인 패턴의 반전의 인스턴스라고 생각합니다.

    피어 종속성 원형 예 그런트 호스트, 및 플러그인이다.

    예를 들어, https://github.com/gruntjs/grunt-contrib-uglify 같은 그런트 플러그인에, 당신은 그것을 볼 수 있습니다 :

    사용자가 플러그인을 사용할 때 다음, 그는 암시 적으로 ( '꿀꿀-있는 contrib-추하게') 또는 온라인으로 grunt.loadNpmTasks을 추가하여 Gruntfile에서 플러그인을 필요로하지만, 그것의 꿀꿀 사용자가 직접 호출 할 것이다.

    각 플러그인은 다른 그런트 버전이 필요한 경우는 작동하지 않을 것입니다.

    어쩌면 당신은 노드 / 다른 패키지 관리자와 단지 익숙 충분하지 않습니다, 문서가 아주 잘 질문에 대한 답을 생각합니다. 내가 루비 들러에 대해 조금 알고 있기 때문에 나는 아마 단지 그것을 이해합니다.

    핵심 라인은 다음과 같습니다

    그리고 아래 NPM-설정 (7) 찾기 DEV :

    Default: false
    Type: Boolean
    
    Install dev-dependencies along with packages.
    

  2. 2.당신이 devDependencies를 설치하지 않으려면 당신은 --production를 설치 NPM 사용할 수 있습니다

    당신이 devDependencies를 설치하지 않으려면 당신은 --production를 설치 NPM 사용할 수 있습니다


  3. 3.시험 생산에 필요가 없기 때문에 명시 적 종속성 것 동안 예를 들어, 모카는 일반적으로하는 devDependency 될 것이다.

    시험 생산에 필요가 없기 때문에 명시 적 종속성 것 동안 예를 들어, 모카는 일반적으로하는 devDependency 될 것이다.


  4. 4.종속 종속성 프로젝트 요구 사항은 당신이 당신의 코드에서 부르는 기능을 제공하는 라이브러리처럼 실행하는 것이다. (B는 B와 C를 설치하는에 설치 NPM, C에 의존에 의존하는 경우) 그들은 이적으로 설치됩니다. 예 : lodash은 : 프로젝트는 일부 lodash 함수를 호출합니다.

    종속 종속성 프로젝트 요구 사항은 당신이 당신의 코드에서 부르는 기능을 제공하는 라이브러리처럼 실행하는 것이다. (B는 B와 C를 설치하는에 설치 NPM, C에 의존에 의존하는 경우) 그들은 이적으로 설치됩니다. 예 : lodash은 : 프로젝트는 일부 lodash 함수를 호출합니다.

    devDependencies 당신은 단지 개발하는 동안 또는 코드를 가지고 자바 스크립트, 테스트 프레임 워크 또는 문서 생성기로 컴파일 컴파일러처럼 풀어 필요 종속성. 그들은 이적으로 설치되지 않습니다 (A는 B의에 의존하는 경우에만 B를 설치하는에 설치 NPM, C에 dev에 따라 다름). 예 : 툴툴 거리는 소리 : 프로젝트 사용 자체를 구축 투덜.

    peerDependencies 프로젝트가 상위 프로젝트, 다른 도서관이나 도구에 대한 일반적으로 플러그인에,에 후크, 또는 수정하는 것이 종속성. 단지 확인 부모 프로젝트 (프로젝트에 따라 달라집니다 프로젝트) 당신이에 후크 프로젝트에 대한 종속성을 가지고있어 체크하기위한 것입니다. 당신이 라이브러리 B에 기능을 추가하는 플러그인 C를 만드는 경우가 C.에 대한 종속성이있는 경우 그래서, 다음 프로젝트 A를 만드는 사람이 B에 종속가 필요합니다 (NPM <3 제외), 그들은에만 체크 그들은 설치되지 않습니다. 예 : 툴툴 거리는 소리는 : 프로젝트는 툴툴 거리는 소리에 기능을 추가 만 사용 꿀꿀 그 프로젝트에 사용할 수 있습니다.

    이 문서는 정말 잘 피어 종속성을 설명합니다 https://nodejs.org/en/blog/npm/peer-dependencies/

    또한, NPM 문서는 시간이 지남에 따라 개선되었습니다, 지금 의존성의 다른 유형의 더 나은 설명이 있습니다 https://github.com/npm/cli/blob/latest/doc/files/package.json.md#devdependencies


  5. 5.DEV 종속성으로 package.json에 패키지를 저장하려면 :

    DEV 종속성으로 package.json에 패키지를 저장하려면 :

    npm install "$package" --save-dev
    

    설치 NPM 실행하면 그것은 devDependencies 및 종속성을 모두 설치합니다. 설치를 방지하기 위해 devDependencies 실행 :

    npm install --production
    

  6. 6.생산에 필요하지 않은 개발을위한 필요한 몇 가지 모듈과 패키지가 있습니다. 이 문서에 그것을 말한다처럼 :

    생산에 필요하지 않은 개발을위한 필요한 몇 가지 모듈과 패키지가 있습니다. 이 문서에 그것을 말한다처럼 :


  7. 7.좀 더 명확 나에게 만들어 간단한 설명은 다음과 같습니다

    좀 더 명확 나에게 만들어 간단한 설명은 다음과 같습니다

    앱을 배포 할 때 종속 모듈을 설치해야하거나 앱이 작동하지 않습니다. devDependencies의 모듈은 해당 시스템에서 개발하지 않는 때문에 프로덕션 서버에 설치할 필요가 없습니다. 링크


  8. 8.나는 이러한 종속성의 설명에 대답에 내 시야를 추가 할

    나는 이러한 종속성의 설명에 대답에 내 시야를 추가 할


  9. 9.내가 치로는 위에서 언급 한 주제에 대한 블로그 게시물에서이 코드를 읽을 때까지 peerDependencies는 매우 나를 위해 이해가되지 않았다

    내가 치로는 위에서 언급 한 주제에 대한 블로그 게시물에서이 코드를 읽을 때까지 peerDependencies는 매우 나를 위해 이해가되지 않았다

    peerDependencies는 그 기능을 수행하기 위해 "호스트"도서관이 필요한 플러그인, 라이브러리,하지만 호스트의 최신 버전이 출시되기 전에 한 번에 기록되었을 것입니다.

    내가 HostLibraryX v3의 PluginX v1을 쓰기 멀리 걸 으면 즉, HostLibraryX V4 (또는 HostLibraryX의 V3.0.1)가 해제 될 때 PluginX v1을 작동한다는 보장은 없습니다.

    플러그인의 관점에서, 그것은 단지 호스트 라이브러리에 기능을 추가합니다. 나는 정말 "필요"호스트는 플러그인에 대한 종속성을 추가 않으며, 플러그인은 종종 말 그대로 자신의 호스트에 의존하지 않습니다. 호스트가없는 경우, 플러그인은 소득없이 아무것도하지 않는다.

    이 수단 종속성 정말 플러그인에 대한 올바른 개념이 아니다.

    나의 호스트가 종속 취급 경우 더 나쁜, 우리가 같은 블로그 게시물 언급하는 것이이 상황에서 끝낼 것 (이 답변의 호스트 및 플러그인을 만들어 사용하기 조금 편집) :

    ... 그 플러그인의 요점입니다. 이제 호스트는 모든 플러그인에 대한 의존성 정보를 포함하는 좋은 충분했다 경우, 그 문제를 해결할 것뿐만 아니라 거대한 새로운 문화 문제에 소개했던 그 : 관리 플러그인을!

    플러그인의 요점은 익명으로 짝을 할 수 있다는 것입니다. 완벽한 세계에서 호스트있는 것은 그들 모두가 깔끔한 & 깔끔한 것 '관리하지만, 우리는 도서관의 무리 고양이를 필요로하지 않을거야.

    대신, 우리는있는 동료의 개념을 가지고있다. 나도 호스트도 플러그인의 다른 종속 양동이에 앉아 없습니다. 모두 종속성 그래프의 동일한 수준에서 살고 있습니다.

    내가 PluginX v1을 해요과의 피어를 기대한다면 HostLibraryX v3의 (즉,의 peerDependency가)를, 나는 이렇게 말할 것이다. 당신이 (버전 4 참고)과는 플러그인이 설치 v1을 한 최신 HostLibraryX의 V4로 자동 업그레이드 한 경우 바로 알 필요가?

    NPM은 나에게이 상황을 관리 할 수 ​​없습니다 -

    ... 또는 ...

    어떻게 어떤 약, NPM!

    그래서 NPM하지 않습니다. 이 상황에 대한주의를하고 HostLibraryX의 V4는 플러그인 V1에 적합한 피어 경우 알아낼 수 있습니다.

    플러그인에서 좋은 peerDependency 관리는 실제로 더 직관적으로이 개념의 작업을 할 것입니다. 블로그 게시물에서, 다시 한번 ...


  10. 10.요컨대

    요컨대

    로컬 컴퓨터에서 작업하는 경우 그래서 그냥 설치하고 계속 NPM 입력 :


  11. 11.dev에 의존 대 종속성

    dev에 의존 대 종속성

    데브 종속성 종속성 런타임에 필요한 반면 단지 개발 과정에서 필요한 모듈입니다. 응용 프로그램을 배포하는 경우, 종속성을 설치해야합니다, 또는 다른 앱 단순히 작동하지 않습니다. 당신이 의존성으로 간주 될 수 실행할 수있는 프로그램을 수 있도록 사용자 코드에서 부르는 라이브러리.

    예 - 반작용, 반작용 - DOM을

    당신이 자바 스크립트에 코드를 은밀한 그 기계 .compilers 발전 거하지 않기 때문에 데브 종속 모듈이 프로덕션 서버에 설치 될 필요는 없다 그들은 단지 개발시 필요하기 때문에, 테스트 프레임 워크 및 문서 발전기는 DEV-의존성으로 간주 될 수있다.

    예 - ESLint, 바벨, 웹팩

    @FYI,

    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
    

  12. 12.나는 간단한 설명을 발견했다.

    나는 간단한 설명을 발견했다.

    짧은 답변:

    종속 "... 당신의 프로젝트가 정말 생산 작업을 할 수 있어야하는 것들이다."

    devDependencies "... 당신은 개발 과정에서 필요한 것들이다."

    peerDependencies "당신이 작성하고 자신의 라이브러리를 게시 할 경우이 종속성으로 사용할 수 있도록"

    이 게시물에서 자세한 내용 : https://code-trotter.com/web/dependencies-vs-devdependencies-vs-peerdependencies


  13. 13.NPM 패키지를 배포하려고 할 때 당신은 종속성을 사용하지 않아야합니다. 대신 당신은 peerDependencies로를 추가하는 것을 고려하거나 의존성에서 제거해야합니다.

    NPM 패키지를 배포하려고 할 때 당신은 종속성을 사용하지 않아야합니다. 대신 당신은 peerDependencies로를 추가하는 것을 고려하거나 의존성에서 제거해야합니다.

  14. from https://stackoverflow.com/questions/18875674/whats-the-difference-between-dependencies-devdependencies-and-peerdependencies by cc-by-sa and MIT license