타입스크립트 보일러플레이트 바로가기
https://github.com/sangbeomheo/typescript-boilerplate
ESLint는 ECMAScript/JavaScript 코드에서 발견된 패턴을 식별하고 보고하는 도구로, 코드의 일관성을 높이고 버그를 방지하는 것을 목표로 합니다. 여러 면에서 몇 가지 예외를 제외하고는 JSLint 및 JSHint와 유사합니다.
rule
들은 하나의 플러그인이고 추가/삭제 할 수 있다../eslintrc.json
를 생성한다.npm i -D eslint
https://eslint.org/docs/latest/user-guide/configuring/configuration-files#cascading-and-hierarchy
root: true
를 만나면 탐색을 멈춘다.home
└── user
└── projectA
├── .eslintrc.json <- Not used
└── lib
├── .eslintrc.json <- { "root": true }
└── main.js
// ./eslintrc.json
{
"root": true
}
https://eslint.org/docs/latest/user-guide/configuring/language-options#specifying-environments
{
"env": {
"browser": true,
"es2021": true,
"node": true
}
}
https://eslint.org/docs/latest/user-guide/configuring/language-options#specifying-parser-options
ecmaVersion
: 사용할 ECMAScript 버전을 설정sourceType
: parser의 export 형태를 설정 "parserOptions": {
"ecmaVersion": "lastest",
"sourceType": "module"
}
https://eslint.org/docs/latest/user-guide/configuring/language-options#specifying-globals
"writable"
:변수 덮어쓰기를 허용"readonly"
:덮어쓰기 허용X{
"globals": {
"Atomics": "readonly",
"SharedArrayBuffer": "readonly"
}
}
// eslint가 인식하지못하는 빌트인 전역객체 Atomics, SharedArrayBuffer를 사용하지않게 한다.
// 관련링크: https://stackoverflow.com/questions/68338890/why-do-developers-occasionally-add-sharedarraybuffer-atomics-to-the-esl
{
"ignorePatterns": ["dist", "node_modules"]
}
}
.ts
파일에만 typescript-eslint/parser
적용{
"overrides": [
{
"files": "**/*.+(ts|tsx)",
"parser": "@typescript-eslint/parser",
"plugins": ["@typescript-eslint"],
"extends": ["plugin:@typescript-eslint/recommended"]
}
]
}
ESLint
에서 제공하는 규칙 이외의 추가적인 규칙을 사용할 수 있도록 해준다.ESLint
는 기본적으로 순수 자바스크립트 코드만 체크할 수 있는데 타입스크립트를 체크하기 위해 @typescript-eslint
플러그인을 설치해 사용할 수 있다.extends
, rules
옵션을 통해서 프로젝트에서 실제로 적용할 수 있다.{
"plugins": ["import", "@typescript-eslint"],
}
eslint-config-airbnb
도 그 중 하나이다.{
"plugins": ["import", "react"],
"extends": [
"plugin:import/recommended",
"plugin:react/recommended"
]
}
extends
로 적용한 base 규칙에서 특정 규칙들을 덮어쓸 때 사용{
"extends": ["react"],
"rules": {
"no-console": "error",
}
}
{
"root": true,
"env": {
"browser": true,
"es2021": true,
"node": true
},
"globals": {
"Atomics": "readonly",
"SharedArrayBuffer": "readonly"
},
"parserOptions": {
"sourceType": "module",
"ecmaVersion": "latest"
},
"extends": ["eslint:recommended"], //eslint가 제공하는 기본 설정
"plugins": [],
"rules": {},
"ignorePatterns": ["dist", "node_modules"]
}
eslint-config-airbnb
설치하기npm i -D eslint-config-airbnb
extends
옵션에 airbnb-base
추가하기airbnb
vs airbnb-base
airbnb-base
옵션은 리액트 관련 설정이 들어 있다.{
//...
"extends": [
"airbnb-base",
],
//...
}
eslint-config-airbnb
를 잘 설치했다면 이런 메시지를 확인할 수 있다.eslint-config-airbnb-base@15.0.0 requires a peer of eslint-plugin-import@^2.25.2 but none is installed. You must install peer dependencies yourself
airbnb-base
만 사용하니까 eslint-plugin-import
를 설치https://github.com/import-js/eslint-plugin-import#installation
npm i -D eslint-plugin-import
{
//...
"extends": [
"airbnb-base",
"plugin:import/recommended",
],
//...
}
airbnb-base
설정 적용 전 : eslint 에러 뜨지 않음airbnb-base
설정 적용 후 : airbnb-base
에서는 var
대신 const, let
을 권장npm i
@typescript-eslint/eslint-plugin
@typescript-eslint/parser // eslint가 typescript 파일을 파싱할 수 있게 함
eslint-config-airbnb-typescript // airbnb의 typscript 설정
{
//...
"extends": [
"airbnb-base",
"airbnb-typescript/base", // +
"plugin:@typescript-eslint/recommended", // +
"plugin:import/recommended",
"plugin:import/typescript" // +
],
//...
}
설정 적용 전 : 에러가 아닌 내용을 에러로 평가한다.
설정 적용 후
{
//...
"extends": ["airbnb-base", "plugin:import/recommended"],
"overrides": [
{
"files": "**/*.+(ts)", // ts파일에서만 적용
"parser": "@typescript-eslint/parser",
"extends": [
"airbnb-typescript/base",
"plugin:import/typescript",
"plugin:@typescript-eslint/recommended"
]
}
],
//...
}
overrides 적용 전 : js파일인데 @typescript-eslint
가 동작한다.
overrides 적용 후
{
"root": true,
"env": {
"browser": true,
"es2021": true,
"node": true
},
"globals": {
"Atomics": "readonly",
"SharedArrayBuffer": "readonly"
},
"parserOptions": {
"sourceType": "module",
"ecmaVersion": "latest",
"project": "./tsconfig.json"
},
"extends": ["airbnb-base", "plugin:import/recommended"],
"overrides": [
{
"files": "**/*.+(ts)",
"parser": "@typescript-eslint/parser",
"extends": [
"airbnb-typescript/base",
"plugin:import/typescript",
"plugin:@typescript-eslint/recommended"
]
}
],
"ignorePatterns": ["dist", "node_modules"]
}
https://eslint.org/
https://typescript-eslint.io/
https://www.npmjs.com/package/eslint-config-airbnb
https://www.npmjs.com/package/eslint-config-airbnb-typescript
https://github.com/airbnb/javascript
https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/extensions.md
https://jeonghwan-kim.github.io/series/2019/12/30/frontend-dev-env-lint.html#21-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90
https://www.daleseo.com/eslint-config/