peerDependencies 와 overrides 의 차이점(package management)

2024. 11. 9. 13:34·Computer Science/Terminology and Concepts

바로 요약

  • peerDependencies - 다른 패키지들의 의존 관계도 만족되는 경우에만 peerDependencies 의 설정된 버전이 사용된다.
  • overrides - 의존 관계와 상관없이 overrides 를 사용하면 항상 설정된 버전이 사용된다.

패키지 관리에서 peerDependencies와 overrides의 차이는 버전 처리 및 강제 적용 방식에 관한 것입니다.
아래는 그 차이에 대한 설명입니다:

peerDependencies

• 목적: 주로 패키지가 호스트 프로젝트(또는 다른 라이브러리)가 특정 버전의 의존성을 제공할 것으로 기대할 때 사용됩니다.

• 버전 유연성: peerDependencies는 의존성을 자체적으로 설치하지 않습니다. 대신, 호스트 애플리케이션이 사용해야 하는 요구된 버전 범위를 명시합니다.

• 강제 적용: 호스트 프로젝트가 명시된 버전을 충족하지 않으면, 패키지 관리자는(npm과 같은) 경고를 표시합니다. 최근 버전의 npm(7버전 이상)에서는 peerDependencies가 자동으로 설치될 수 있지만, 오직 다른 의존성과 호환되는 버전일 경우에만 설치됩니다. 특정 버전을 “강제”하는 것이 아니라 요청하는 방식입니다.


예시:

// package.json
{
    "peerDependencies": {
        "react": "^17.0.0"
    }
}

이 예시에서, 패키지는 프로젝트가 React 17 버전 이상 또는 호환되는 버전을 사용하기를 기대하지만, React 자체는 설치하지 않습니다. 사용자는 해당 범위를 충족하는 버전의 React를 설치해야 하며, 그렇지 않으면 경고를 받게 됩니다.

overrides(npm에서는 overrides, Yarn에서는 resolutions)

• 목적: overrides는 의존성의 특정 버전을 강제로 사용하도록 설정할 수 있습니다. 다른 패키지가 충돌하는 요구 사항을 가지더라도 이를 강제할 수 있습니다.

• 강제 적용: 이 접근 방식은 peerDependencies보다 더 공격적입니다. 프로젝트의 모든 패키지가 명시된 버전을 사용하도록 강제하며, 각 패키지가 요구하는 의존성 버전과 관계없이 적용됩니다.

• 일반적인 사용 사례: monorepo에서나 의존성 버전에서 알려진 문제가 있을 때, 다른 버전을 강제로 사용하도록 설정하여 문제를 우회하고자 할 때 유용합니다.


예시:

// package.json
{
    "overrides": {
        "react": "17.0.2"
    }
}

이 설정이 있으면, npm은 프로젝트 내의 모든 React 인스턴스가 버전 17.0.2를 사용하도록 보장합니다. 다른 패키지가 다른 버전을 명시하더라도 관계없이 강제로 17.0.2 버전으로 맞춰집니다.

어떤 상황에서 사용할까요

• peerDependencies는 패키지가 소비하는 프로젝트에서 제공하는 다른 의존성의 호환 가능한 버전이 필요할 때 사용합니다. 이 경우 해당 의존성을 직접 설치하지 않고, 사용자가 직접 설치하도록 요구합니다.

• overrides는 특정 버전에 대해 엄격한 제어가 필요하고, 프로젝트 전체에서 이 버전을 강제로 사용해야 할 때 사용합니다. 특히 peerDependencies로 해결할 수 없는 버전 충돌을 해결해야 할 때 유용합니다.


버전을 엄격하게 제어하고 싶다면 overrides를 사용하고,
호환성 범위를 지정하고 메인 프로젝트가 결정하도록 하려면 peerDependencies를 사용하세요.

'Computer Science > Terminology and Concepts' 카테고리의 다른 글

Unique Identifiers  (1) 2024.12.08
에러와 버그의 차이점  (0) 2024.12.08
DOM 트리의 탐색  (0) 2022.12.13
dependencies version in package.json  (0) 2021.10.16
What is JSON File ?  (0) 2021.09.09
'Computer Science/Terminology and Concepts' 카테고리의 다른 글
  • Unique Identifiers
  • 에러와 버그의 차이점
  • DOM 트리의 탐색
  • dependencies version in package.json
JTB
JTB
웹/앱 개발 정보를 공유하고 있습니다.
  • JTB
    JTechBlog
    JTB
  • 전체
    오늘
    어제
    • All About Programming;) N
      • Computer Science
        • Terminology and Concepts
        • Network
        • Operating System
        • Database
        • Data Structure
      • Frontend
        • Javascript Essentials
        • Perfomance Optimization
        • JS Patterns
        • Next.js
        • Flutter
      • Backend
        • Node.js
      • DevOps
        • Docker & Kubernetes
      • Coding Test N
        • LeetCode N
        • Programmers
      • Tech Books & Lectures
        • Javascript_Modern JS Deep d..
        • Network_IT 엔지니어를 위한 네트워크 입문
      • Projects
        • PolyLingo_2025
        • Build Your Body_2024
        • JStargram_2021
        • Covid19 Tracker_2021
        • JPortfolio_2021
      • BootCamp_Codestates
        • TIL
        • TILookCloser
        • Pre Tech Blog
        • IM Tech Blog
        • Daily Issues and DeBugging
        • First Project
        • Final Project
        • Sprint Review
        • Good to Know
        • Socrative Review
        • HTML & CSS
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 글쓰기
    • 관리
  • 공지사항

  • 인기 글

  • 태그

    자바스크립트
    Time complexity and Space complexity
    polylingo
    모던 자바스크립트 Deep Dive
    leetcode
    Threads and Multithreading
    CPU scheduling algorithm
    DOM
    Binary Tree BFS
    이벤트
    Network
    TCP/IP
    딥다이브
    indie hacker
    need a database
    js pattern
    JavaScript
    Operating System
    커리어
    Shared resources
    structure of os
    VoiceJournal
    Data Structure
    스코프
    mobile app
    testing
    프론트엔드 성능 최적화 가이드
    How memory manage data
    자바스크립트 딥다이브
    database
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
JTB
peerDependencies 와 overrides 의 차이점(package management)
상단으로

티스토리툴바