프로젝트 생성
npx create-next-app 프로젝트명 –-typescript
eslint, prettier 라이브러리 설치
npm i -D eslint eslint-config-airbnb eslint-plugin-import eslint-plugin-jsx-a11y eslint-plugin-react eslint-plugin-react-hooks
npm i -D prettier eslint-config-prettier eslint-plugin-prettier
npm i -D babel-eslint eslint-plugin-babel
npm i -D @typescript-eslint/eslint-plugin @typescript-eslint/parser
설정파일 예시
eslint 설정 파일 예시 (.eslintrc)
{
"plugins": ["@typescript-eslint", "prettier"],
"extends": ["plugin:@typescript-eslint/eslint-recommended", "plugin:@typescript-eslint/recommended", "plugin:prettier/recommended"],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": 2018,
"sourceType": "module",
"ecmaFeatures": {
"jsx": true,
"tsx": true
}
},
"settings": {
"react": {
"version": "detect"
}
},
"ignorePatterns": ["node_modules/", ".next/*"],
"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,
"no-unused-vars": "off",
"no-undef": "off",
"/no-useless-escape": "off",
"prettier/prettier": [
"error",
{
"endOfLine": "auto",
"useTabs": false
}
],
"indent": ["error", 2],
"@typescript-eslint/no-empty-interface": "off",
"no-empty-interface": "off"
},
"globals": {
"React": "writable"
},
"overrides": [
{
"files": ["*.js", "*.jsx"],
"rules": {
"@typescript-eslint/explicit-function-return-type": "off",
"@typescript-eslint/no-unused-vars": "off",
"@typescript-eslint/no-empty-interface": "off"
}
}
]
}
prettier 설정 파일 예시 (.prettierrc)
{
"trailingComma": "es5",
"tabWidth": 2,
"semi": true,
"singleQuote": true,
"printWidth": 100,
"eslintIntegration": true,
"endOfLine": "auto",
"parser": "typescript",
"useTabs": false,
"arrowParens": "always"
}