![Typescript 컴파일 설정 - tsconfig.json](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdVC90%2FbtsAULTGf5G%2FjLi46UPkbIhLN67LIyKer0%2Fimg.png)
필요 배경 지식
- Typescript와 Javascript의 관계
- Typescript 컴파일 방법 및 환경 설정 방법 (아래 링크 참고)
환경 구성 / CLI - TypeScript Guidebook
-b, --build 오래된 경우, 하나 이상의 프로젝트 또는 해당 종속성 빌드 -t 버전, --target 버전 ES 버전 설정 ('ES3'(기본값),'ES5','ES2015','ES2016','ES2017','ES2018','ESNEXT') -m 모듈유형, --module 모듈유형 모듈유형
yamoo9.gitbook.io
Prerequisite
- 딱히 없음.
tsconfig.json
사용법
tsconfig.json
을 사용하는 경우
- 인풋 파일이 없는
tsc
명령의 경우,tsconfig.json
에 설정된 모든 디렉토리를 컴파일한다. - 인풋 파일이 없는
tsc
명령의 경우, -p 옵션을 사용해tsconfig.json
또는 유효한 json 파일을 지정 가능
tsconfig.json
을 사용하지 않는 경우
- 파일을 지정하는
tsc <파일.ts>
명령의 경우tsconfig.json
파일은 무시됨
tsconfig.json
생성 방법
$ tsc --init
필요한건 알았지만 맨날 GPT가 만들어 줬어서 init 방법도 가이드를 보면서 처음 알게됐다.
조금 부끄럽다.. ㅠ
tsconfig.json
옵션들 정리
옵션들을 정리해두고 나중에 필요할때 확인해봐야겠다.
특히나 GPT는 모든 옵션을 다 알려주고 config를 생성하지는 않고 사람들이 자주 쓰는 옵션을 주로 알려주는것 같기때문에, 이런 기회에 한번정도 읽어보면 좋을것 같다.
{
"compilerOptions": {
/* 기본 옵션
* ------------------------------------------------------------------------------------------------------------------------------------------------ */
// "incremental": true, /* 증분 컴파일 활성화 */
"target": "es5", /* ECMAScript 목표 버전 설정: 'ES3'(기본), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
"module": "esnext", /* 생성될 모듈 코드 설정: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
"lib": ["dom", "dom.iterable", "esnext"], /* 컴파일 과정에 사용될 라이브러리 파일 설정 */
"allowJs": true, /* JavaScript 파일 컴파일 허용 */
// "checkJs": true, /* .js 파일 오류 리포트 설정 */
"jsx": "react", /* 생성될 JSX 코드 설정: 'preserve', 'react-native', or 'react'. */
// "declaration": true, /* '.d.ts' 파일 생성 설정 */
// "declarationMap": true, /* 해당하는 각 '.d.ts'파일에 대한 소스 맵 생성 */
// "sourceMap": true, /* 소스맵 '.map' 파일 생성 설정 */
// "outFile": "./", /* 복수 파일을 묶어 하나의 파일로 출력 설정 */
// "outDir": "./dist", /* 출력될 디렉토리 설정 */
// "rootDir": "./", /* 입력 파일들의 루트 디렉토리 설정. --outDir 옵션을 사용해 출력 디렉토리 설정이 가능 */
// "composite": true, /* 프로젝트 컴파일 활성화 */
// "tsBuildInfoFile": "./", /* 증분 컴파일 정보를 저장할 파일 지정 */
// "removeComments": true, /* 출력 시, 주석 제거 설정 */
"noEmit": true, /* 출력 방출(emit) 유무 설정 */
// "importHelpers": true, /* 'tslib'로부터 헬퍼를 호출할 지 설정 */
// "downlevelIteration": true, /* 'ES5' 혹은 'ES3' 타겟 설정 시 Iterables 'for-of', 'spread', 'destructuring' 완벽 지원 설정 */
"isolatedModules": true, /* 각 파일을 별도 모듈로 변환 ('ts.transpileModule'과 유사) */
/* 엄격한 유형 검사 옵션
* ------------------------------------------------------------------------------------------------------------------------------------------------ */
"strict": true, /* 모든 엄격한 유형 검사 옵션 활성화 */
// "noImplicitAny": true, /* 명시적이지 않은 'any' 유형으로 표현식 및 선언 사용 시 오류 발생 */
// "strictNullChecks": true, /* 엄격한 null 검사 사용 */
// "strictFunctionTypes": true, /* 엄격한 함수 유형 검사 사용 */
// "strictBindCallApply": true, /* 엄격한 'bind', 'call', 'apply' 함수 메서드 사용 */
// "strictPropertyInitialization": true, /* 클래스에서 속성 초기화 엄격 검사 사용 */
// "noImplicitThis": true, /* 명시적이지 않은 'any'유형으로 'this' 표현식 사용 시 오류 발생 */
// "alwaysStrict": true, /* 엄격모드에서 구문 분석 후, 각 소스 파일에 "use strict" 코드를 출력 */
/* 추가 검사 옵션
* ------------------------------------------------------------------------------------------------------------------------------------------------ */
// "noUnusedLocals": true, /* 사용되지 않은 로컬이 있을 경우, 오류로 보고 */
// "noUnusedParameters": true, /* 사용되지 않은 매개변수가 있을 경우, 오류로 보고 */
// "noImplicitReturns": true, /* 함수가 값을 반환하지 않을 경우, 오류로 보고 */
"noFallthroughCasesInSwitch": true, /* switch 문 오류 유형에 대한 오류 보고 */
// "noUncheckedIndexedAccess": true, /* 인덱스 시그니처 결과에 'undefined' 포함 */
/* 모듈 분석 옵션
* ------------------------------------------------------------------------------------------------------------------------------------------------ */
"moduleResolution": "node", /* 모듈 분석 방법 설정: 'node' (Node.js) 또는 'classic' (TypeScript pre-1.6). */
// "baseUrl": "./", /* 절대 경로 모듈이 아닌, 모듈이 기본적으로 위치한 디렉토리 설정 (예: './modules-name') */
// "paths": {}, /* 'baseUrl'을 기준으로 상대 위치로 가져오기를 다시 매핑하는 항목 설정 */
// "rootDirs": [], /* 런타임 시 프로젝트 구조를 나타내는 로트 디렉토리 목록 */
// "typeRoots": [], /* 유형 정의를 포함할 디렉토리 목록 */
// "types": [], /* 컴파일 시 포함될 유형 선언 파일 입력 */
"allowSyntheticDefaultImports": true, /* 기본 출력(default export)이 없는 모듈로부터 기본 호출을 허용 (이 코드는 단지 유형 검사만 수행) */
"esModuleInterop": true /* 모든 가져오기에 대한 네임스페이스 객체 생성을 통해 CommonJS와 ES 모듈 간의 상호 운용성을 제공. 'allowSyntheticDefaultImports' 암시 */
// "preserveSymlinks": true, /* symlinks 실제 경로로 결정하지 않음 */
// "allowUmdGlobalAccess": true, /* 모듈에서 UMD 글로벌에 접근 허용 */
/* 소스맵 옵션
* ------------------------------------------------------------------------------------------------------------------------------------------------ */
// "sourceRoot": "./", /* 디버거(debugger)가 소스 위치 대신 TypeScript 파일을 찾을 위치 설정 */
// "mapRoot": "./", /* 디버거가 생성된 위치 대신 맵 파일을 찾을 위치 설정 */
// "inlineSourceMap": true, /* 하나의 인라인 소스맵을 내보내도록 설정 */
// "inlineSources": true, /* 하나의 파일 안에 소스와 소스 코드를 함께 내보내도록 설정. '--inlineSourceMap' 또는 '--sourceMap' 설정이 필요 */
/* 실험적인 기능 옵션
* ------------------------------------------------------------------------------------------------------------------------------------------------ */
// "experimentalDecorators": true, /* ES7 데코레이터(decorators) 실험 기능 지원 설정 */
// "emitDecoratorMetadata": true, /* 데코레이터를 위한 유형 메타데이터 방출 실험 기능 지원 설정 */
/* 고급 옵션
* ------------------------------------------------------------------------------------------------------------------------------------------------ */
"skipLibCheck": true, /* 선언 파일 유형 검사 스킵 */
"forceConsistentCasingInFileNames": true /* 동일한 파일에 대한 일관되지 않은 케이스 참조를 허용하지 않음 */
}
}
솔직히 다 써본게 아니라서 하나하나가 정확하게 어떤 의미를 가지는지는 모르겠다.
추후에 활용해보면서 무슨 의미인지 알아야할 듯.
Include/exclude 설정
컴파일에 포함할 디렉토리/파일 경로를 설정하거나 제외할 수 있다고 한다.
glob 패턴을 사용하여 표기 할 수 있다.
glob 패턴
와일드카드 | 설명 | 예 | 일치 | 미일치 |
* | 없는 것을 포함한 어떠한 수의 문자라도 일치 | Law* | Law, Laws, 또는 Lawyer | GrokLaw, La, 또는 aw |
*Law* | Law, GrokLaw, 또는 Lawyer. | La, 또는 aw | ||
? | 어떠한 하나의 문자를 일치 | ?at | Cat, cat, Bat 또는 bat | at |
[abc] | 대괄호 안의 하나의 문자를 일치 | [CB]at | Cat 또는 Bat | cat 또는 bat |
[a-z] | 대괄호 안의 범위에 속하는 하나의 문자를 일치 (로케일에 따라 다름) | Letter[0-9] | Letter0, Letter1, Letter2 ... Letter9 | Letters, Letter 또는 Letter10 |
실제 include/exclude 예시
{
// 컴파일 포함
"include": [
"src/**/*.tsx?"
],
// 컴파일 제외
"exclude": [
"node_modules",
"build",
"**/*.(spec|test).ts"
],
// 컴파일 옵션
"compilerOptions": { ... }
}
Reference
컴파일 설정 - TypeScript Guidebook
"target": "es5", /* ECMAScript 목표 버전 설정: 'ES3'(기본), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ "module": "esnext", /* 생성될 모듈 코드 설정: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015
yamoo9.gitbook.io
'백엔드 > NodeJS | Typescript' 카테고리의 다른 글
Typescript 프로젝트의 naming convention (0) | 2023.12.07 |
---|---|
Typescript 이해하기 - Async/Await 이해하기 (0) | 2023.11.28 |
Typescript 이해하기 - 제너레이터 이해하기 (0) | 2023.11.28 |
Typescript 이해하기 - Promise 이해하기 (0) | 2023.11.27 |
Typescript 변수 타입 (0) | 2023.11.26 |
개발 및 IT 관련 포스팅을 작성 하는 블로그입니다.
IT 기술 및 개인 개발에 대한 내용을 작성하는 블로그입니다. 많은 분들과 소통하며 의견을 나누고 싶습니다.