본문 바로가기
TypeScript

dependencies, devDependencies 차이점 (@types/)

by whoyoung90 2023. 11. 28.
반응형

Javascript 내에서 라이브러리의 의존성 관리를 위한 종류는 3가지로 나뉜다.

> dependencies

현재 프로젝트를 실행하는데(런타임시) 필수적인 라이브러리들을 포함.
이는 컴파일을 수행하고 런타임 단계에서 수행되는 라이브러리들이 이에 해당된다.

 

프로젝트를 npm에 공개하여 다른 사용자가 해당 프로젝트를 설치하면 dependencies에 들어 있는 라이브러리도 함께 설치된다.

(전이 의존성)

yarn add react

> devDependencies

현재 프로젝트를 개발하고 테스트를 하는데 사용되지만, 런타임에는 필요 없는 라이브러리들을 포함.
이는 런타임 단계에서는 수행되지 않고 이전 컴파일 단계에서까지만 수행되는 라이브러리가 해당 됩니다.

ex) 컴파일 단계에서 사용하는 타입스크립트와 관련된 라이브러리 @types/xxx의 경우 이에 해당된다. 

타입스크립트의 컴파일러를 통해서 실행 할 수 있다.

(ex. 테스트 프레임워크, prettier, eslint)

 

프로젝트를 npm에 공개하여 다른 사용자가 해당 프로젝트를 설치하면 devDependencies에 포함된 라이브러리들은 제외됨.

 

타입스크립트는 개발 도구일 뿐 타입 정보는 런타임에 존재하지 않기 때문에 타입스크립트와 관련된 라이브러리는 이곳에 속한다.

 

DefinitelyTyped의 타입 정의들은 npm 레지스트리의 @types 스코프에 공개되기에

원본 라이브러리 자체가 dependencies에 있더라도 @types 의존성은 devDependencies에 있어야함.

(런타입에 @types가 필요한 경우라면 별도의 작업 필요)

yarn add -D @types/react

 

{
  "dependencies": {
     "react": "^17.0.2",
  }
  "devDependencies": {
    "@types/react": "^17.0.2",
    "typescript": "^5.1.6"
  },
}

>  peerDependencies

런타임에는 필요하기는 하지만 소스코드내에 의존성을 직접 관리하지 않는 라이브러리들이 포함된다.
소스코드 내에 require , import로 불러오지는 않지만 라이브러리 의존성으로 필요한 경우가 이에 해당.

 

 

[참고 URL]

https://gguldh.tistory.com/63

https://adjh54.tistory.com/38

반응형

댓글