FE/TypeScript

[TpyeScript] 타입스크립트과 의존성 (@types)

mandelina 2022. 10. 6. 02:36

모든 언어에서 라이브러리 의존성 관리는 어려운 일이다.. (TS책의 한구절)

너무 공감한다. 그놈의 의존성 ㅜㅜ 내가 TS 프로젝트를 하면서도 이 의존성 문제 때문에 꽤 애를 먹었었다.

이참에  타입스크립트에서의 의존성을 마스터 해보자.

 


 

devDependencies에 typescript와 @types 추가하기

 

npm자바스크립트 라이브러리 저장소프로젝트가 의존하고 있는 라이브러리들의 버전을 지정하는 방법을 제공한다. 3가지 종류의 의존성을 구분하며 관리하고 , 각 의존성을 package.json 파일 내 별도 영역에 들어있다. 

 

1. dependencies

- 현재 프로젝트를 실행하는 데 필수적인 라이브러리 포함

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

 

2. devDependencies

- 현재 프로젝트를 개발하고 테스트하는 데 사용되지만, 런타임에는 필요 없는 라이브러리가 포함된다.

ex) 프로젝트에서 사용 중인 테스트 프레임워크

 

3. peerDependencies

- 런타임에 필요하긴 하지만, 의존성을 직접 관리하지 않는 라이브러리들이 포함된다.

ex) 플러그인

 

이 세가지중 1,2번이 일반적으로 사용된다.

 

 

타입스크립트는 개발 도구일뿐이고 타입 정보는 런타임에 존재하지 않기때문에 , 타입스크립트와 관련된 라이브러리는 일반적으로 devDependencies(2) 에 속한다. 

 


 

모든 타입스크립트 프로젝트에서 고려해야 할 의존성 2가지가 있다. 

 

첫째 , 타입스크립트 자체 의존성

 

-  타입스크립트를 시스템 레벨로 설치하기 보단 devDependencies에 넣는 것이 좋다. (팀원들과 버전을 맞추기 위해)

 

-  devDependencies에 포함되어 있으면, npm install을 실행 할 때 팀원들은 모두 정확한 버전의 TS를 설치 가능하다. 

 

- 대부분 TS IDE와 빌드 도구는devDependencies를 통해 설치된 TS버전을 인식할 수 있도록 되어 있다.

또한 npx를 사용하여 devDependencies를 통해 설치된 TS 컴파일러를 실행할 수 있다.

 

둘째 , 타입 의존성  (@types)

 

- 사용하는 라이브러리에 타입 선언이 포함되어 있지 않아도 DefinitelyTyped에서 타입 정보를 얻을 수 있다.

(DefinitelyTyped : TS 커뮤니티에서 유지보수하고 있는 JS라이브러리의 타입을 정의한 모음)

 

-  DefinitelyTyped 타입 정의들은 npm 레지스트리의 @types 스코프에 공개된다.

 

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

 

ex ) React의 타입선언 , 의존성 추가

 

npm install react

npm install --save-dev @types/react

 

이렇게 하면, package.json파일에 dependencies와 devDependencies에 각각 의존성이 추가된다.

 


 

 

정리하자면

1. 타입스크립트 프로젝트의 devDependencies에 포함시켜 팀원 모두가 동일한 버전을 사용하도록 하자!

 

2. @types 의존성은 devDependencies에 포함시키는것 ! (Dependencies 아님)

    런타임에 @typse가 필요하다면 별도의 작업이 필요!

 

참고 : 이펙티브 타입스크립트

 

 

'FE > TypeScript' 카테고리의 다른 글

[TypeScript] keyof와 typeof란 ?  (0) 2023.03.01
[TypeScript] 타입스크립트 너는 누구냣  (0) 2022.08.22