ESLint 8.21.0 버전부터 구성 파일에 큰 변화가 생겼다. 기존 .eslintrc 파일 대신 플랫 구성(Flat Config)을 사용하는 eslint.config.js 형식이 새로 도입된 것. 플랫 구성은 extends나 overrides 같은 계층 구조없이 각 구성을 이루는 객체들을 포함한 1차원 배열로 표현한다. 이를 통해 규칙을 세분화해야 하는 상황에서 더 유연하게 대응할 수 있게 됐다. e.g., 구성 객체 1-자바스크립트 규칙, 구성 객체 2-타입스크립트 규칙
필요한 플러그인은 직접 import 한 후 사용하는 방식으로 변경돼서 종속성을 더 명확하게 관리할 수 있다.
import eslint from '@eslint/js';
import reactPlugin from 'eslint-plugin-react';
export default [
// 불러온 구성 객체 1 { rules: { ... } }
eslint.configs.recommended,
// jsx, tsx 파일에만 적용할 구성 객체 2
{
files: ['**/*.{jsx,tsx}'],
plugins: { 'react': reactPlugin },
// ...
}
];
배열에 들어가는 각 구성 객체는 아래 속성을 포함하며, 1개 이상의 구성 객체로 조합해서 사용할 수 있다.
하지만 아직까지 플랫 구성을 지원하지 않는 플러그인이 꽤 있고, ESLint 9 버전에서 여러 API가 변경됐기 때문에 기존 plugin(규칙 정의 모음)/config(규칙 정의 + 패키지 모음)가 지원할 때까진 8.x 버전을 사용하는게 좋다.
아래는 2024.06.28 기준 주요 플러그인 지원 현황. ESLint에서 제공하는 Compatibility Utilities를 사용하거나 별도의 Workaround가 필요한 플러그인은 🌗로 표시했다. 더 자세한 지원 현황은 링크를 참고하자.
플러그인 이름 | Flat Config 지원 | ESLint v9 지원 | 관련 Issue/PR |
---|---|---|---|
typescript-eslint | ✅ | ✅ | |
eslint-config-airbnb | ❌ | ❌ | Issue |
eslint-config-airbnb-typescript | ❌ | ❌ | Issue |
eslint-config-standard | ✅ | 🌗 | Issue |
eslint-plugin-react | ✅ | 🌗 | Issue |
eslint-plugin-react-hooks | ✅ | 🌗 | Issue |
eslint-plugin-jsx-a11y | ✅ | 🌗 | Issue |
eslint-plugin-import | ❌ | ❌ | PR |
eslint-plugin-prettier | ✅ | ✅ | |
eslint-plugin-react-refresh | ✅ | ✅ | |
eslint-plugin-tailwindcss | ✅ | 🌗 | Issue |
@tanstack/eslint-plugin-query | 🌗 | 🌗 | Issue |
<aside> <img src="/icons/search_gray.svg" alt="/icons/search_gray.svg" width="40px" /> 아래 세팅은 create vite 기준으로 작성했다. 패키지 매니저는 pnpm을 사용했다.
</aside>
프로젝트를 처음 시작한다면 ESLint v9 Flat Config 로 설정해두고, 향후 필요한 플러그인이 Flat Config를 지원했을 때 구성 파일을 업데이트하는게 더 편리할 수 있다.
eslint-config-airbnb는 아직 Flat Config를 지원하지 않기 때문에 대안으로 eslint-config-standard를 사용할 수 있다. Airbnb는 너무 엄격한 규칙 때문에 일일이 프로젝트에 맞춰 수정하는 과정이 번거로울 때가 종종 있는데, Standard JS는 규칙이 좀 더 유연한 장점이 있다.