환경세팅

프로젝트 세팅 _ ESLint와 Prettier 알아보기

썽연 2022. 4. 25. 17:26
728x90

ESLint란?

ES + Lint를 합친것

ES = Ecma Script

ES는 표준 자바스크립트를 뜻한다.

Lint = 에러가 있는 코드에 표시를 해줌을 뜻한다.

즉, ESLint는 표준 자바스크립트에서 에러가 있는 코드에 표시를 해준다!

협업할 때 특히 유용한 ESLint이다.

Prettier란?

코드 정리 규칙을 설정해놓을 수 있는 플러그인으로,
정해놓은 규칙에 맞게 자동으로 정렬해서 가독성을 높이고 코드 스타일을 통일할 수 있다.

즉, Prettier는 코딩 스타일을 잡아준다!

그렇다면 ESLint와 Prettier을 이용하여 프로젝트 세팅을 해보자

원래 ESLint 를 사용하려면 프로젝트에 직접 설치해야 하지만,
CRA의 경우 기본적으로 ESLint 세팅이 다 되어 있는 장점이 있다. 그래서, Airbnb 스타일같은 extension만 설치해주면 개발 환경에서도 ESLint 룰을 적용받을 수 있다.

그래서 VSCODE의 확장프로그램인 ESLint와 Prettier을 먼저 설치해준다.

ESLint 플러그인 설치하기

Airbnb 스타일을 설치해주기 전에, 사전에 설치되어야 하는 것들이 있으므로
npm info "eslint-config-airbnb@latest" peerDependencies
코드를 통해 사전 설치해야할 플러그인들을 확인해준다.

{
  eslint: '^7.32.0 || ^8.2.0',
  'eslint-plugin-import': '^2.25.3',
  'eslint-plugin-jsx-a11y': '^6.5.1',
  'eslint-plugin-react': '^7.28.0',
  'eslint-plugin-react-hooks': '^4.3.0'
}

위와 같이 사전에 설치할 플러그인이 뜨므로 모두 설치해준다.

yarn add -D eslint eslint-config-airbnb eslint-plugin-import eslint-plugin-jsx-a11y eslint-plugin-react eslint-plugin-react-hooks

eslint-plugin-import : ES6 의 import/export syntax 체크, 파일 경로나 import 이름을 잘못 입력하는지 여부를 체크해주는 lint 플러그인입니다.
eslint-plugin-jsx-a11y : 리액트 element 의 접근성 이슈를 짚어 lint 해주는 플러그인입니다. 예를 들자면 interactive 하지 않은 엘리먼트에 click 핸들러가 달려 있다. 이런 오류를 뿜습니다.
eslint-plugin-react : 리액트 규칙들을 추가해주는 플러그인입니다.
eslint-plugin-react-hooks : 리액트 hooks 규칙들을 추가해 주는 플러그인

Prettier의 플러그인들도 설치하여준다.

yarn add -D prettier eslint-config-prettier eslint-plugin-prettier

eslint-config-prettier : ESLint의 formatting 관련 설정 중 Prettier와 충돌하는 부분을 비활성화해주는 플러그인
Prettier에서 문법 관련된 ESlint 규칙을 사용하지 않게 되기 때문에 ESLint 는 자바스크립트 문법을 담당하고,
코드 스타일 정리는 Prettier가 담당한다.
eslint-plugin-prettier : 원하는 형식의 formatting 을 설정해줍니다.

yarn add -D babel-eslint eslint-plugin-babel

babel-eslint : Babel 이 서포트해주는 코드에 ESLint 를 적용할 수 있도록 해줍니다. 한마디로, ES6 이상의 자바스크립트, flow type 등의 feature 를 지원해줍니다. ESLint 만 깔 경우, ES6 / JSX / 객체 rest, spread 까지의 문법만 지원해줍니다. 그 이상의 문법 지원이 필요할 경우 반드시 이걸 깔아줘야 하는 거죠.
eslint-plugin-babel : 더 많은, 실험중인 feature 까지 지원해주는 플러그인입니다. babel-eslint 를 보완해주는 플러그인입니다.

ESLint설정하기 (.eslintrc.json 파일)

{
  "env": {
    "browser": true,
    "es6": true,
    "node": true
  },
  "parser": "babel-eslint",
  "extends": [
    "eslint:recommended",
    "plugin:react/recommended",
    "airbnb",
    "plugin:prettier/recommended"
  ],
  "settings": {
    "react": {
      "version": "detect"
    }
  },
  "parserOptions": {
    "ecmaFeatures": {
      "jsx": true
    },
    "ecmaVersion": 2018,
    "sourceType": "module"
  },
  "plugins": ["react", "react-hooks", "prettier"],
  "rules": {
    "react/react-in-jsx-scope": 0,
    "react/prefer-stateless-function": 0,
    "react/jsx-filename-extension": 0,
    "react/jsx-one-expression-per-line": 0,
    "no-nested-ternary": 0
  }
}

참고 문서

"env" : 활성화하고싶은 환경 설정 / 현재 브라우저, node, es6 환경이 활성화되어 있습니다.
"parser" : parser 를 설정해줍니다.
설정하지 않을 경우 Espree가 기본 parser 로 설정됩니다. 보통 Espree, Babel-ESLint, @typescript-eslint/parser 을 사용합니다. (Babel-ESLint 사용하였음)
"extends" : extension 파트. 이 extension 파트에 Prettier 를 꼭 추가해주셔야 Prettier 를 사용할 수 있습니다.
저희는 Airbnb 설정을 사용하기로 했으니 Airbnb 도 추가해줍니다.
"rules" : 필요한 설정, 필요없는 설정을 관리하는 파트입니다. / 1은 사용하겠다는 뜻, 0은 사용하지 않겠다는 뜻

.eslintrc.json 파일을 만들지 않고 package.json 파일에 ESLint 설정을 해 주는 방법도 있다.

// package.json

"eslintConfig": {
    "env": {
        "browser": true,
        "node": true
    }

위의 코드를 추가해주면 되지만, 보통 분리를 한다!
왜 ? package.json에는 설치된 패키지들만 보는것이 보기 편리함!

React import관련 에러

React must be in scope, 즉 상단에 리액트가 import 되지 않아 생기는 에러로 'React' must be in scope when using JSX react/react-in-jsx-scope가 뜰 때가 있다.

분명 Next에서는 React를 import하지 않아도 되는데, 에러가 뜰 시
.eslintrc.json파일의 rules부분에

 "rules": {
    "react/react-in-jsx-scope": 0,
  },
  "globals": {
    "React": "writable"
  }

을 추가해준다.

Prettier 설정하기

.prettierrc 파일에

{
    "singleQuote": false,
    "semi": true,
    "useTabs": false,
    "tabWidth": 2,
    "trailingComma": "all",
    "printWidth": 80
}

코드를 추가해준다.

singleQuote = 문자열을 사용 할 때에는 " 를 사용 (홑따옴표가 아닌 겹따옴표 사용)
semi = 코드는 ; (semi-colon)으로 끝나야합니다.
useTabs = tab 사용여부 true와 false / tab대신에 스페이스를 사용할 것임.
tabWidth = 들여쓰기 크기는 2칸입니다. (space 2칸)
trailingComma = 객체나 배열을 작성 할 때, 원소 혹은 key-value 의 맨 뒤에있는 것에도 쉼표 붙이기
printWidth = 한 줄이 80칸이 넘지 않도록 한다.

각 코드의 해석은 다음과 같다.

위와 같이 프로젝티 초기 세팅을 할 때 ESLint와 Prettier을 설정해준 이후에, 개발을 시작하는 것이 협업할 때 정말 좋은 방법이다.

728x90