새로운 프로젝트를 진행하는데, lint 설정은 이전 프로젝트와 그대로지만 에디터에서 lint 경고나 에러를 제대로 나타내지 못했다.
package.json
"next": "15.0.1",
"eslint": "^9.14.0",
.eslintrc.json
{
"extends": ["next/core-web-vitals", "next/typescript"]
}
eslint debugger를 통해 설정에 어떤 문제가 있는지 파악할 수 있다.
https://eslint.org/docs/latest/use/configure/debug
$ npx eslint --debug
Oops! Something went wrong! :(
ESLint: 9.14.0
ESLint couldn't find an eslint.config.(js|mjs|cjs) file.
From ESLint v9.0.0, the default configuration file is now eslint.config.js.
If you are using a .eslintrc.* file, please follow the migration guide
to update your configuration file to the new format:
https://eslint.org/docs/latest/use/configure/migration-guide
If you still have problems after following the migration guide, please stop by
https://eslint.org/chat/help to chat with the team.
eslint 버전이 9로 업데이트됨에 따라, eslint의 설정을 관리하는 파일의 형태가 변경되었고 기존에 사용하고 있던 형태인 .eslintrc.*
는 새로운 파일 형태로 변경해주어야 한다는 것.
.eslintrc.json
{
"extends": ["next/core-web-vitals", "next/typescript"]
}
eslint.config.mjs
import path from "node:path";
import { fileURLToPath } from "node:url";
import { FlatCompat } from "@eslint/eslintrc";
import js from "@eslint/js";
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const compat = new FlatCompat({
baseDirectory: __dirname,
recommendedConfig: js.configs.recommended,
allConfig: js.configs.all
});
const config = [
...compat.extends("next/core-web-vitals", "next/typescript"),
];
export default config;
eslint 9로 버전이 변경됨에 따라, 기존 설정 파일 형태 중 .eslintrc.*
를 사용할 수 없게 되었음.
이로 인해, 에디터에서 해당 설정을 읽을 수 없게 되면서 lint가 동작하지 않았던 것.
eslint debugger를 통해 문제에 대한 원인을 찾을 수 있었고, 마이그레이션 가이드를 따라 해결할 수 있었다.
Eslint 마이그레이션 가이드
https://eslint.org/docs/latest/use/configure/migration-guide
유사한 문제를 겪은 개발자의 질문
https://stackoverflow.com/questions/79128326/eslint-9-is-not-working-properly-with-next-15
nextjs 15 github issue
https://github.com/vercel/next.js/issues/71763#issuecomment-2436288395