프로젝트에서 tsconfig.json
과 ESLint 설정 파일(.eslintrc.js
또는 index.js
)을 설정하다 보면, ES 버전이 서로 다르게 설정된 것을 발견할 수 있다. 예를 들어, TypeScript의 tsconfig.json
에서 target
을 ES2020
으로 설정했지만, ESLint에서는 env
옵션이 es6
로 설정되어 있을 수 있다.
TypeScript와 ESLint는 각각 다른 목적을 위해 ES 버전을 설정하지만, 프로젝트의 일관성을 위해 이 둘을 맞춰주는 것이 좋다. TypeScript의 target과 ESLint의 parserOptions.ecmaVersion을 동일한 ECMAScript 버전으로 설정하면, 최신 자바스크립트 기능을 사용하면서도 일관된 코드 스타일을 유지할 수 있다.
TypeScript와 ESLint의 역할
먼저, TypeScript와 ESLint가 각각 어떤 역할을 하는지 이해하는 것이 중요하다.
- TypeScript (
tsconfig.json
)tsconfig.json
의compilerOptions
에서 설정된target
은 TypeScript 컴파일러가 코드를 컴파일할 때 어떤 ECMAScript(ES) 버전으로 컴파일된 JavaScript 코드를 생성할지를 결정한다.target: "ES2020"
로 설정하면, TypeScript는 ES2020 기능을 포함하는 JavaScript 코드를 생성한다.
- ESLint (
.eslintrc.js
또는index.js
)- ESLint는 코드의 문법과 스타일을 검사하는 도구이다.
env
옵션은 ESLint가 코드가 실행될 환경을 인식하도록 돕는다. env: { es6: true }
로 설정하면, ESLint는 ES6 기능(예:let
,const
,arrow functions
)을 허용하지만, ES2020의 최신 기능을 인식하지 못할 수 있다.
- ESLint는 코드의 문법과 스타일을 검사하는 도구이다.
왜 ES 버전이 다르게 설정될까?
이런 차이는 주로 두 가지 이유로 발생한다:
- 기본 설정: ESLint의
env: { es6: true }
는 기본적으로 설정되어 있는 경우가 많다. ES6(ES2015)은 대부분의 자바스크립트 프로젝트에서 표준으로 사용되기 때문에, 이 설정은 흔히 사용된다. - 기능 인식 범위 차이: TypeScript는 코드의 컴파일 출력을 제어하고, ESLint는 코드의 구문을 검사한다. TypeScript는 최신 ECMAScript 기능을 사용할 수 있게 하는 반면, ESLint는 기본적으로 ES6만을 대상으로 할 수 있다.
어떻게 개선할 수 있을까?
ESLint가 ES2020 문법과 기능을 완전히 이해하도록 설정을 변경할 수 있다. 이를 위해 parserOptions
에서 ECMAScript 버전을 명시적으로 설정해 주는 것이 좋다. 아래는 이를 개선한 ESLint 설정 예시이다.
- ecmaVersion: 2020: ESLint가 ES2020의 최신 기능을 이해하고, 이를 바탕으로 코드 스타일을 검사할 수 있다.
- sourceType: "module": 모듈 시스템을 지원하여, import와 export 구문을 사용할 수 있게 한다.
module.exports = {
root: true,
extends: [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:prettier/recommended"
],
parser: "@typescript-eslint/parser",
plugins: ["@typescript-eslint"],
env: {
node: true,
es6: true, // 여전히 ES6 환경 설정, 필요에 따라 유지
},
parserOptions: {
ecmaVersion: 2020, // ESLint가 ES2020 기능을 이해하도록 설정
sourceType: "module" // ECMAScript 모듈을 지원
},
rules: {
// 프로젝트에 맞게 규칙을 추가하세요.
},
};
728x90
'Javascript' 카테고리의 다른 글
[JS] Turborepo를 활용한 공통 라이브러리 관리 (0) | 2024.08.31 |
---|---|
[JS] Express 기초 (0) | 2024.08.02 |
[JS] 타입스크립트의 Record 타입 (0) | 2024.07.31 |
[JS] peerDepedencies (0) | 2024.07.30 |
순수 함수 (3) | 2024.07.22 |