모든 언어에서 라이브러리 의존성 관리는 어려운 일이다.. (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 |