ESLint & Prettier
포스트
취소

ESLint & Prettier

해당 포스트는 EslintPrettier에 대한 포스트입니다.

🧱 ESLint

Lint란 소스 코드에 문법적인 문제가 있는지 탐색하는 도구입니다.
그 중에서 ESLint라는 도구를 사용해서 런타임 전에 미리 코드의 문제를 확인할 수 있습니다.

0️⃣ 설치

1
2
3
4
5
6
7
npm i -D eslint

# extends ( 예시용 )
npm i -D eslint-config-airbnb

# plugin ( 예시용 )
npm i -D eslint-plugin-import

1️⃣ ESLint 설정 파일

.eslintrc.js말고 .eslintrc.json으로 생성하면 자동완성을 지원해줍니다.

  • .eslintrc.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
  "env": {
    "browser": true,
    "es2021": true,
    "node": true
  },
  "overrides": [],
  "parserOptions": {
    "ecmaVersion": "latest",
    "sourceType": "module"
  },
  "plugins": ["import"],
  "extends": ["airbnb", "plugin:import/recommended"],
  "rules": {}
}
  • airbnb: airbnb의 규칙 적용
  • plugin:import/recommended: ES6 모듈 시스템 규칙 적용

1. env

코드를 실행하는 환경마다 갖고 있는 전역변수들이 다릅니다.
특정 환경에 맞는 전역변수들이나 환경에 대한 린팅 문제를 해결하기 위한 설정 값입니다.

1
2
3
4
5
6
7
8
{
  "env": {
    "browser": true,
    "es2021": true,
    "node": true
  },
  // ... 나머지 생략
}

2. plugin

누군가에 의해 이미 만들어진 rule을 가져오는 옵션입니다.
가져온다고 적용되는 것은 아니고 그냥 설정 가능한 상태로 만드는 옵션입니다.
extends에서 추가 설정을 해줘야 적용됩니다.

1
2
3
4
{
  "plugins": ["import"],
  // ... 나머지 생략
}

3. extends

이미 만들어진 린팅 규칙 혹은 plugin으로 등록한 규칙을 적용하는 옵션입니다.
airbnb, facebook같은 곳에서 만들어둔 린팅 규칙을 바로 적용할 수 있습니다.
( eslint-config-airbnb-base 등 )
( eslint-config- 생략 가능합니다. )

1
2
3
4
{
  "extends": ["airbnb", "plugin:import/recommended"],
  // ... 나머지 생략
}

4. rules

자세한 규칙들은 eslint - rules에서 확인할 수 있습니다.

extends로 설정된 rule을 커스터마이징하는 옵션입니다.
즉, 기존 규칙에 필요한 부분만 커스터마이징하는 옵션입니다. ( 덮어쓰기 )

1
2
3
4
5
6
7
{
  "rules": {
    // 불필요한 세미콜론 사용  에러
    "no-extra-semi": "error"
  },
  // ... 나머지 생략
}

🖌️ Prettier

코드 스타일을 관리해주는 도구입니다.
줄바꿈, 들여쓰기, 쌍따옴표, 화살표 함수등의 문법적으로 문제는 없지만 사람마다 다르게 사용하는 부분을 관리해주는 도구입니다.

0️⃣ Prettier 설정 파일

자세한 prettier 설정은 Prettier - Options를 참고해주세요.

  • .prettierrc.json
1
2
3
4
5
{
  "singleQuote": false,
  "tabWidth": 2,
  // ...
}

만약 .prettierrc.jsonVSCode setting.jsonprettier가 세팅되어 있다면 .prettierrc.json가 우선적으로 적용됩니다.

🎨 ESLint + Prettier

ESLintPrettier의 역할을 다르지만 중복으로 처리하는 부분이 있을 수 있습니다.
그런 충돌을 해결하기 위해서 아래와 같이 세팅해야합니다.

0️⃣ 설치

1
2
# eslint와 prettier의 호환성을 위함
npm i -D eslint-config-prettier eslint-plugin-prettier

1️⃣ 설정 파일

  • .eslintrc.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
  "env": {
    "browser": true,
    "es2021": true,
    "node": true
  },
  "overrides": [],
  "parserOptions": {
    "ecmaVersion": "latest",
    "sourceType": "module"
  },
  "plugins": ["import", "prettier"],
  "extends": ["airbnb", "plugin:import/recommended", "plugin:prettier/recommended"],
  "rules": {
    "prettier/prettier": "error"
  }
}
  • plugin:prettier/recommended: eslint-plugin-prettier의 설정 적용

🐣 마무리

여러 문서와 포스트를 찾아보면서 설정을 했는데 이게 제대로 동작하는 건지 아닌 건지 확신이 안 들어서 제대로 정리한 것인지도 잘 모르겠네요… 🥲

일단 얼마후에 팀 프로젝트를 할 예정이라 미리 기본 세팅 방법들에 대해 공부해보고 있어서 아직 적용을 해보지 못한 상태입니다.
나중에 프로젝트를 진행하고 세팅에 문제가 있었거나 새롭게 이해한 부분이 생긴다면 다시 수정하겠습니다.

📮 레퍼런스

  1. helloinyong - (ESLint & Prettier) Setting
  2. daleseo - eslint 사용
  3. daleseo - eslint 상세 설정 가이드

  4. GitHub - eslint-config-airbnb
  5. GitHub - eslint-plugin-import
  6. 1-blue - ES6 모듈 시스템
  7. GitHub - eslint-config-prettier
  8. GitHub - eslint-plugin-prettier
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.