yeon
yeon I am a Korean web programmer with bboy dancing as a hobby. :)

tsconfig

tsconfig

tsconfig

tsconfig.json 파일을 기점으로 Typescript 프로젝트가 설정된 옵션들로 컴파일된다. tsc 커멘드 입력시 상위 디렉토리 체인으로 tsconfig.json 파일을 탐색해 나간다.


커맨드 옵션 -p 혹은 —project를 넣어 직접 tsconfig.json 설정도 가능하다.


  • tsconfig.json을 fs 역방향으로 탐색하여 컴파일 실행

tsc


  • 컴파일할 ts 파일 지정

tsc index.ts


  • 디렉토리 하위의 ts 파일을 컴파일

tsc src/*.ts


  • tsconfig.json 컴파일 설정으로 ts 파일을 컴파일

tsc —project tsconfig.json src/*.ts



compilerOptions

컴파일에 사용될 속성으로 생략시 컴파일 기본 값이 사용된다.


Key Description Ex    
기본 옵션        
target ECMAScript 대상 버전 설정 es6    
module 빌드 결과의 모듈 방식 commonjs    
lib 컴파일에 포함될 라이브러리 지정 [“es6”, “dom”]    
allowJs .js 파일도 컴파일 대상에 포함 true    
checkJs .js 파일의 오류 보고 true    
jsx .tsx 파일에서 JSX 코드를 지원 ‘preserve’ ‘react’ ‘react-native’    
outDir 빌드 결과물이 위치할 폴더 build/dist    
sourceMap bundle 결과물의 .map.js 함께 생성 true    
       
엄격한 유형 검사 옵션        
strict 엄격한 유형 검사 옵션 활성화 true    
strictNullChecks 엄격한 null 검사를 활성화 true    
noImplictAny any 표현식 선언에서 오류 발생 true    
       
모듈 확인 옵션        
typeRoots 유형 정의를 포함 할 폴더 목록 [”./typings”]    
types 컴파일에 포함될 유형 선언 파일 [“node”, “lodash”, “express”]    



typeRoots & types

기본적으로 유형 정의에 대한 @types 패키지는 컴파일에 모두 포함된다. typeRoots를 지정할 경우 지정된 타입 정의만이 포함된다.

아래의 경우 typings 아래의 패키지만 포함된다. (./node_modules/@types)가 포함되지 않음

1
2
3
4
5
{
   "compilerOptions": {
       "typeRoots" : ["./typings"]
   }
}



types를 지정하면 해당 패키지만 컴파일 목록에 포함된다.

아래와 같이 지정할 경우 . ./node_modules/@types/node, ./node_modules/@types/lodash , ./node_modules/@types/express 가 포함된다.

1
2
3
4
5
{
   "compilerOptions": {
       "types" : ["node", "lodash", "express"]
   }
}


types 패키지는 index.d.ts 파일이 있는 폴더 또는 폴더에 types 필드를 가진 package.json 이 있는 폴더이다.



files

컴파일할 파일의 상대 또는 절대 파일 경로 목록을 가진다.


include

컴파일에 포함되는 파일 경로 목록을 가진다.


exclude

컴파일에서 제외할 파일 경로 목록을 가진다.


files, include, exclude 는 서로 상관관계를 가지며, includeexclude 에 포함되지 않는 파일만을 포함한다. (excludeinclude 목록에 포함된 파일을 필터)

명시적으로 파일을 지정하는 files 에 지정된 파일들은 exclude 로 제외되지 않는다.

exclude 를 지정하지 않는다면 기본적으로 node_module, bower_components, jspm_packages<outDir> 을 제외한다.



extends

tsconfig.json 에서 extends 는 다른 파일의 설정을 상속 받을 수 있도록 해준다. 기존 파일의 설정이 먼저 로드된 이후에 상속되는 설정 파일을 가져와 재정의 한다.


상속파일의 files , include , exclude 는 기본 설정을 덮어쓴다. 설정파일의 모든 상대적 경로는 경로가 원래 있던 설정 파일 기준으로 해석된다.


  • configs/base.json
1
2
3
4
5
6
{
  "compilerOptions": {
    "noImplicitAny": true,
    "strictNullChecks": true
  }
}


  • tsconfig.json
1
2
3
4
5
6
7
{
  "extends": "./configs/base",
  "files": [
    "main.ts",
    "supplemental.ts"
  ]
}



complieOnSave

해당 속성은 IDE 에서 소스 저장 시 컴파일 해야하는 경우 지정된 tsconfig.json 에 대한 컴파일을 컴파일러에게 알려준다.



[Ref] :




comments powered by Disqus