프로젝트를 생성 할 때 기본적으로 tsconfig.json를 구성하여 컴파일러에게 프로젝트를 어떻게 컴파일하고 설정할지 알려줍니다.
tsconfig.json의 구성
//JSON
//tsconfig.json
{
"compilerOptions": {
"target": "ES2015", //자바스크립트 2015버전으로 변환 하겠다
"module": "ESNext", //모듈은 자바스크립트의 최신버전으로 사용하겠다
"moduleResolution": "Node", //?
"esModuleInterop": true, //esm.js와 common.js 다 사용가능하도록
"lib": ["ESNext","DOM"], //컴파일 할 때 선택하는 라이브러리
"strict": true //문법을 정확히 지켜 써라
},
"include": [ // 포함할 파일
"src/**/*.ts"
],
"exclude": [ //제외할 파일
"node_modules"
]
}
tsconfig.json 파일안에는 기본적으로 3가지 옵션을 넣습니다
compilerOptions
include
exclude
compilerOptions
💡
compilerOptions는 만들어진 TypeScript 파일을 JavaScript로 변환 할 때 어떤 기준을 가지고 컴파일지를 적는 부분입니다.
"compilerOptions": {
//컴파일될 ES(JS) 버전 명시 - "ES2015" 권장
"target": "ES5",
// 모듈 시스템 지정 - "CommonJS", "AMD", "ESNext"
"module": "CommonJS",
//모듈 해석 방식 지정 - "Node", "Classic"
"moduleResolution": "Node",
//ESM 모듈 방식 호환성 활성화 여부
"esModuleInterop": false,
//모든 파일을 모듈로 컴파일, import 혹은 export 키워드 필수
"isolatedModules": false,
//모듈 해석에 사용할 기준 경로 지정
"baseUrl": "./",
//컴파일러가 참조할 타입 선언(d.ts)의 경로를 지정
"typeRoots": ["./node_modules/@types"],
//컴파일러에서 사용할 라이브러리 지정 - "ESNext", "DOM"
"lib": [],
//엄격한 타입 검색 활성화
"strict": false
},
💡
따로 값들을 지정하지 않으면 위의 값이 기본으로 적용됩니다.
target
"target": "ES2015",
//"target": "ES6",
target은 컴파일될 자바스크립트의 버전을 명시 합니다. ES2015 버전이나 ES6 버전을 이용합니다.
ES2015 버전은 ES6 과 같습니다.
module
"module": "ESNext"
자바스크립트를 쓰는 환경이 “node.js”와 “웹 브라우저” 환경이 있습니다. 이에 사용하는 환경에 해당하는 모듈 시스템을 선택 할 수 있습니다.
node.js 환경에서는 CommonJs를 사용하고
웹브라우저에서는 에크마스크립트 모듈(ESM) 을 사용합니다
ESNext는 ESM의 가장 최신 방식의 ESM 입니다.
moduleResolution
"moduleResolution": "Node",
모듈을 불러 올 때 index는 생략이 가능하였습니다. 이는 “moduleResolution” 옵션을 “Node”로 선언하였기 때문입니다.
모듈 해석 방식은 "Node", "Classic” 2가지가 있습니다
esModuleInterop
"esModuleInterop": true,
CommonJS 모듈 시스템을 사용하는 라이브러리와 ES6 모듈 시스템을 사용하는 코드를 함께 사용할 때 사용합니다
esModuleInterop": false로 기본 선언 되어 있기에 CommonJS 방식으로 선언된 모듈을 가져올 수 없습니다.
true로 선언해야 CommonJS 방식으로 선언된 모듈 또한 사용 할수 있기에 이 옵션을 true로 선언 하는 것을 권장합니다.
또한 패키지를 설치할 때 모듈의 선언 방식이 esm형식과 CommonJS의 방식을 둘다 많이 사용하기 true로 선언하는 것이 좋습니다.