Peer Dependency
정의
peer dependency
는 라이브러리나 플러그인에서 사용하는 패키지중에서 라이브러리를 사용하는 사용자가 직접 설치해야하는 패키지를 의미합니다. 반면에 dependency
들은 라이브러리 설치시 기본으로 설치됩니다.
package.json에서
당신의 패키지와 내부에서 사용중인 라이브러리와의 호환성을 표현하고 싶을 떄가 있습니다. 꼭 그 사용하지 않더라도요. 보통 플러그인 같은 곳에서 그럴 때가 있습니다. 주목할만한 건, 그 호스트 문서에 의해서 당신의 모듈이 명시되고 예상된 특정 인터페이스를 노출하게 될 거라는 것입니다. 즉. 당신의 모듈이 호스트 문서에 설계된 방향으로 작동하게 된다는 의미입니다.
예를 들어
{
"name": "tea-latte",
"version": "1.3.5",
"peerDependencies": {
"tea": "2.x"
}
}
위 코드는 당신의 패키지 tea-latte
가 tea
패키지의 두번째 메이저 버전만으로 설치될 수 있다는 것을 나타냅니다. npm install tea-latte
는 다음과 같은 의존성 그래프를 만들어낼 수 있습니다.
├── tea-latte@1.3.5
└── tea@2.2.0
npm 버전 3부터 6까지는, peerDependencies
는 자동으로 설치되지 않고, 만약 유효하지 않은 버전의 peer denpendency가 트리에서 발견되면 경고를 보여줍니다. npm7 버전부터는, peer dependency는 기본으로 설치됩니다.
만약 트리가 정상적으로 생성되지 않는다면 필수조건과 충돌하는 플러그인 설치 시도는 에러를 발생시킵니다. 이러한 이유 때문에 당신의 플러그인 필수조건을 가능한한 포괄적이도록 해야하며, 특정 패치 버전에 묶이도록 해서는 안됩니다.
호스트가 semver로 컴파일한다면, 호스트 패키지의 메 이저 버전의 변화만이 당신의 플러그인을 깨뜨립니다. 따라서, 당신이 모든 버전이 1.x인 호스트 패키지로 작업했다면, 이를 표현하기 위해서 ^1.0
이나 1.x
를 사용해야 합니다. 예를 들어 당신이 1.5.2버전에 소개된 기능에 의존한다면, ^1.5.2
를 사용해야 합니다.