React, Next

[REACT] 엄격한 ESLint 만들기

재원쓰 2023. 4. 17. 18:03

eslint 중에서도 악명높은 airbnb 규칙을 설정해보자.

 

npm i -D babel-eslint eslint-config-airbnb eslint-plugin-import eslint-plugin-react-hooks
    • babel-eslint: Babel과 함께 사용되는 Eslint 구문 분석기입니다. JavaScript 코드를 트랜스파일링 하기 전에 Linting 검사를 실행할 수 있습니다.
    • eslint-config-airbnb: Airbnb 스타일 가이드를 따르는 Eslint 구성 파일입니다. 이 구성 파일은 Airbnb에서 사용하는 코드 스타일을 따르며, 코드 품질을 향상시키기 위한 권장 사항과 규칙을 포함합니다.
    • eslint-plugin-import: Eslint에서 모듈 import export 구문을 처리하는 플러그인입니다. 플러그인은 모듈 로딩과 관련된 문제를 식별하고 이를 해결하기 위한 규칙과 권장 사항을 제공합니다. 이는 Node.js 브라우저에서 모듈을 사용할 유용합니다.
    • eslint-plugin-react-hooks: 리액트 함수형 컴포넌트에서 사용하는 React Hooks 대한 규칙을 검사하는 Eslint 플러그인입니다.

 

.eslintrc

{
    "parser": "babel-eslint",
    "parserOptions": {
        "ecmaVersion": 2020,
        "sourceType": "module",
        "ecmaFeatures": {
            "jsx": true
        }
    },
    "env": {
        "browser": true,
        "node": true,
        "es6": true
    },
    "extends": ["airbnb"],
    "plugins": ["import", "react-hooks"],
    "rules": {
        "jsx-a11y/label-has-associated-control": "off",
        "jsx-a11y/anchor-is-valid": "off",
        "no-console": "off",
        "no-underscore-dangle": "off",
        "react/forbid-prop-types": "off",
        "react/jsx-filename-extension": "off",
        "react/jsx-one-expression-per-line": "off",
        "object-curly-newline": "off",
        "linebreak-style": "off",
        "no-param-reassign": "off",
    
        "react/jsx-no-undef": "error",
        "react/function-component-definition": "off",
        // 🔥 모든 코드에 대해 적용되는 규칙
        "indent": ["error", 4],
        "overrides": [
            {
                // 🔥 JS 파일에서 JSX 코드에 대해 적용될 규칙
                "files": ["*.js"],
                "rules": {
                    "react/jsx-indent": ["error", 8]
                }
            }
        ],
        "quotes": "off"
    },
}

함수 부분과 JSX부분의 indent를 따로 설정해줘야 한다.

🔥 표시한 부분을 주목하자. 

기존엔 "indent": ["error", 4] 밖에 없었는데 아래 코드처럼 JSX부분이 에러가 뜬다.

놀랍게도 indent 설정은 함수와 JSX부분을 따로 설정해줘야 한다는 것이다!!!

설정 방법은 위 코드 블록과 같이 overrides 라는 설정값을 사용하면 된다.