Peer Dependencies 에 대하여

Johny Kim·2022년 3월 1일
34

NPM package로 UI library를 개발하면서, 처음에는 중요한지 몰랐던 peer dependencies 에 대해서 공부하게 되었고, 공부한 내용들을 정리한다.

peer dependencies 를 알아보기 위해서는 dependencies와 dev dependencies 를 먼저 알아야 할 것 같다. 자주 사용하기 때문에 어렵지 않을 것이다.

Dependencies

앱에 종속된 가장 일반적인 종속성이다. 런타임과 빌드타임, 개발중 모두에서 이 종속성 패키지들이 필요하기 때문에, 앱이 빌드 될 때 이 종속성 패키지들이 번들에 포함되어 배포된다.

Dev Dependencies

런타임에서는 필요하지 않고 빌드타임 & 개발중에만 필요한 패키지들이다. 빌드타임에서 이 종속성들은 빌드에 도움을 주거나 참조가 되지만, 번들에는 포함되지 않는 종속성 패키지들이다.

Peer Dependencies

이 글의 주인공인 피어 종속성이다. Peer 는 "동료" 라는 뜻을 가지고 있다. 어떤 상황에서 peer dependencies를 사용해야할까?

실제로 패키지에서 직접 require(import) 하지는 않더라도 호환성이 필요한 경우 명시한다.

무슨 말인지 어려우니까 예를 들어보자.

my-app 에서 사용하기 위한 React 기반의 컴포넌트 라이브러리인 my-ui-library를 개발한다고 가정하자. 이 때, UI Library 에서는 react 17.0.0 버전을 peer dependancy로 두고 있다.

my-ui-libraryreact컴포넌트의 라이브러리이기 때문에, 이 라이브러리를 사용하게 될 프로젝트에서는 react를 의존할 수 밖에 없다. 이러한 경우 peer dependencies를 사용한다.

무슨 말인지 여전히 어렵다. 최대한 간단히 말하자면 아래와 같다.

이 라이브러리를 사용하게 될 프로젝트에게,
react ^17.0.0 버전을 사용해주세요! 라고 알려주는 것과 비슷하다.

// my-ui-library package.json
"peerDependencies": {
  "react": "^17.0.0",
}

my-app에서도 dependancies로 이미 react 16.0.0 버전이 설치되어 있는 상태에서, my-ui-library를 설치했다고 가정하자.

// my-app package.json
"dependencies": {
  "react": "^16.0.0",
  "my-ui-library": "^0.0.1"
}

my-app은 아래와 같은 모듈 구조가 생성이 된다.

node_modules
ㄴreact ^16.0.0 (dependancy)
ㄴmy-ui-library ^0.0.1 (dependancy)
  ㄴnode_modules
    ㄴreact ^17.0.0 (peer dependancy)

여기서 react의 버전이 서로 다른 것을 확인할 수 있다. 이처럼 서로 버전이 다른 dependancy를 가지고 있다면, npmyarn은 서로 다른 방법으로 개발자에게 알려준다.

yarn 의 경우

아래와 같은 Warning 메시지를 보여준다.

my-ui-library@0.0.1" has incorrect peer dependency "react@^17.0.0".

npm 의 경우

npm 3버전 까지는 피어 종속성을 자동으로 설치되었지만, 여러 문제가 있어서, 4버전부터 6버전 까지는 경고메시지만 띄워주었고, 7버전부터는 peer dependancy 버전이 맞지 않으면 패키지 설치가 안된다.

npm@<=6 버전과 yarn의 경우 피어 의존성 버전과 설치된 의존성 버전이 서로 맞지 않아도 경고 메시지 외에는 설치에 크게 문제가 없긴 하지만, 어떠한 에러가 발생할지는 모른다. 경고 메시지에 따라 어떤 버전을 실제로 설치하게 될지는 개발자의 선택에 달려있다.

참고한 글

profile
작고 단단한 컴포넌트를 만들자.

3개의 댓글

comment-user-thumbnail
2023년 4월 24일

이게 바로 그 레거시 피어 뎁스였군요... 저도 요즘 ui 라이브러리 만들어 보는 중에 찾아오게 되었는데... 어렴풋이 알고있었는데 이글을 보고 확실히 알게됬어요! 감사합니다~

답글 달기
comment-user-thumbnail
2023년 5월 1일

잘 보고 갑니다

답글 달기
comment-user-thumbnail
2023년 7월 30일

peer dependency가 뭔지 궁금해서 찾아왔는데, 정리를 너무 잘해주셨네요 감사합니다 ㅎㅎ

답글 달기