Item 45 devDependencies에 typescript와 @types 추가하기
npm (node package manager)
npm은 JS 라이브러리 저장소(npm 레지스트리)와 프로젝트가 의존하고 있는 라이브러리들의 버전을 지정하는 방법(package.json)을 제공한다.
npm은 세 가지 종류의 의존성을 구분해 관리하며, 이 의존성들은 package.json에 들어 있다.
dependencies
현재 프로젝트를 실행하는 데 필수적인 라이브러리
프로젝트 런타임에 lodash가 사용된다면 dependencies에 포함되어야 함
프로젝트를 npm에 공개하여 다른 사용자가 해당 프로젝트를 설치하면 여기에 있는 라이브러리도 함께 설치됨
이러한 현상을 전이(transitive) 의존성이라고 한다.
devDependencies
현재 프로젝트를 개발하고 테스트하는 데 사용되지만, 런타임에는 필요 없는 라이브러리
예를 들면 프로젝트에서 사용하고 있는 테스트 프레임워크
프로젝트를 npm에 공개하여 다른 사용자가 해당 프로젝트를 설치하면 여기에 있는 라이브러리는 제외됨
타입스크립트는 개발 도구일 뿐이고 타입 정보는 런타임에 존재하지 않으므로 (Item 3) 일반적으로 타입스크립트 관련 라이브러리는 여기에 속함
peerDependencies
런타임에 필요하지만 의존성을 직접 관리하지 않는 라이브러리
단적인 예로 플러그인이 있음
jQuery의 플러그인은 다양한 버전의 jQuery와 호환되므로 jQuery의 버전을 플러그인에서 직접 선택하지 않고, 플러그인이 사용되는 실제 프로젝트에서 선택하도록 만들 때 사용
타입스크립트에서 공통적으로 고려해야 할 의존성 두 가지
첫 번째, 타입스크립트의 자체 의존성을 고려해야 한다.
타입스크립트를 시스템 레벨에 설치할 수도 있지만, 추천되지 않는다.
팀원들 모두가 항상 동일한 버전의 TS를 설치한다는 보장이 없다.
프로젝트 셋업에 별도의 단계가 추가된다.
두 번째, 타입 의존성(
@types
)을 고려해야 한다.사용하려는 라이브러리에 타입 선언이 포함되어 있지 않더라도, DefinitelyTyped에서 타입 정보를 얻을 수 있다. 여기에 있는 타입 정의들은 npm 레지스트리의
@types
스코프에 공개된다.@types 의존성에 관련된 문제도 있다. Item 46에서 다룬다.
Summary
타입스크립트를 시스템 레벨에 설치하지 말자. 타입스크립트를 devDependencies에 포함시키고 팀원 모두가 동일한 버전을 사용하도록 하자.
@types
의존성도 devDependencies에 추가하자. 런타임에@types
가 필요한 경우라면 별도의 작업이 필요할 수 있다.
Last updated