사소한 개발지식/JavaScript

ESLint - .eslintrc 설정하기

KimBY 2023. 11. 20. 15:19
728x90
반응형

ESLint

.eslintrc 설정하기

 

🔎 .eslintrc 란

ESLint 설정파일로 JSON, YAML, JavaScript 형식을 지원한다. 항상 이름은 .eslintrc 이어야하고 각 파일 형식에 맞춰 확장자를 사용하면 된다. (ex. .eslintrc.json) 

 

🔎 root

Monorepo 와 같이 하나의 repository 에서 여러개의 프로젝트를 관리하는 경우 여러개의 설정파일을 같이 사용할 수 있는데 이럴 때 유용한 옵션이 root 옵션이다. 해당 프로젝트에 .eslintrc 가 없다면 그 상위 폴더를 거슬러 올라가면서 root 가 true 로 설정된 .eslintrc 를 탐색하고 있다면 해당 설정파일로 ESLint 를 적용한다. 

 

🔎 plugins

ESLint 에서 기본적으로 제공하는 규칙 외에 다른 규칙을 적용하고자 할 때 사용하는 옵션으로 적용하고자 하는 추가적인 옵션이 있는 플러그인을 배열로 나열하여 사용한다.

{
  ...,
  "plugins": ["react", "@typescript-eslint"],
  ...
}

 

🔎 extends

plugins 에 추가한 plugin 에서 사용할 설정이나 Google, Facebook, Airbnb 와 같은 기업들에서 공개한 ESLint 설정들을 그대로 가져와 사용하려 할 때 사용되는 옵션이다. 

{
  ...,  
  "extends": [
    "eslint:recommended",
    "plugin:react/recommended",
    "plugin:prettier/recommended",
    "airbnb"
  ],
  ...
}

 

eslint:recommended 는 ESLint 에서 기본적으로 제공하는 설정이며 plugin: 이 붙은 내용은 eslint-plugin-xxx 로 설치한 플러그인의 추천 설정을 나타낸다. 마지막으로 airbnb 는 eslint-config-airbnb 로 설치한 설정값을 사용한다는 의미이다.

 

🔎 rules

원하는 규칙을 자세히 설정할 수 있도록 하는 옵션으로 앞서 설정한 extends 의 규칙과 겹치는 것이 있다면 rules 에 설정한 규칙으로 덮어쓰게 된다.

{
  ...,
  "rules": {
    "react/react-in-jsx-scope": "off", // jsx 에서 import React ... 없을 경우
    "no-unused-vars": "off", // 쓰지 않는 변수가 선언 되었을 경우
    "@typescript-eslint/no-unused-vars": ["warn"], // 쓰지 않는 변수가 선언 되었을 경우(ts)
    "@typescript-eslint/no-explicit-any": ["off"], // any 타입이 사용되었을 경우(ts)
    "@typescript-eslint/no-namespace": "off", // namespace 를 사용하였을 경우(ts)
    "prettier/prettier": [
      "error",
      {
        "endOfLine": "auto"
      }
    ] // prettier 오류일 경우
  },
  ...
}

 

🔎 env

JavaScript 는 여러 환경에서 사용이 가능하며 환경에 따라 사용할 수 있는 고유한 전역 변수가 존재한다. 브라우저에서 사용되는 대표적인 전역변수인 window 는 NodeJS 에서는 사용이 불가능한데 ESLint 에 이러한 환경에 대한 정보를 주어 선언되지 않은 전역변수를 사용할 때 에러가 나지 않도록 하는 옵션이 env 옵션이다.

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

 

🔎 parser / parserOptions

ESLint 는 순수한 JavaScript 만 이해할 수 있기 때문에 TypeScript 나 Babel 과 같은 문법을 이해하기 위해서는 그에 상응하는 parser 를 등록하여야 한다. 이럴 때 사용되는 옵션이 parser 와 parserOptions 이다.

{
  ...,
  "parser": "@typescript-eslint/parser",
  "parserOptions": {
    "ecmaVersion": "latest",
    "sourceType": "module"
  },
  ...
}

 

🔎 settings

특정 ESLint plugin 은 추가적인 설정이 가능한데 이 때 사용되는 옵션이 settings 옵션이다. 대표적인 예로 react plugin 이 프로젝트에서 사용된 react 의 버전을 자동으로 탐색할 수 있도록 하는 옵션을 아래와 같이 설정할 수 있다.

{
  ...,
  "settings": {
    "react": {
      "version": "detect"
    }
  },
  ...
}

 

🔎 ignorePatterns

ESLint 는 기본적으로 node_module 폴더는 무시하는데 그 외에 파일이나 폴더를 lint 에서 제외하고 싶을 때 사용하는 옵션이다.

{
  ...,
  "ignorePatterns": ["build", "dist", "public"],
  ...
}

 

ignorePatterns 로 설정하지 않고 파일로 이를 관리할 수 있는데 .eslintignore 로 파일을 생성해서 제외하고 싶은 파일이나 경로를 작성하면 무시하게 된다.

 

🔎 overrides

프로젝트 내에서 특정 파일에서만 다른 설정을 적용해야할 경우 사용되는 옵션으로 주로 jest 나 typescript 같이 특정 확장자의 파일에서만 다른 설정을 적용할 경우 사용한다.

{
  ...,
  "overrides": [
    {
      "files": ["**/__tests__/**/*", "**/*.{spec,test}.*"],
      "env": {
        "jest/globals": true
      },
      "plugins": ["jest", "testing-library"],
        "extends": [
        "plugin:jest/recommended",
        "plugin:jest-dom/recommended",
        "plugin:testing-library/react"
      ]
    }
  ],
  ...
}

 

참고
https://www.daleseo.com/eslint-config/
728x90
반응형