Tool/VSCode&Cursor
ESLint와 Prettier 설정하기
건담아빠
2023. 11. 17. 17:40
1. ESLint 설치 및 사용방법
1.1. ESLint 설치
$ yarn add -D \
eslint \
@typescript-eslint/eslint-plugin \
@typescript-eslint/parser \
eslint-config-airbnb \
eslint-plugin-import \
eslint-plugin-jsx-a11y \
eslint-plugin-react \
eslint-plugin-react-hooks \
eslint-plugin-sort-keys-fix \
eslint-plugin-storybook
1.2. configuration file 생성
$ yarn create @eslint/config
bash를 실행하면 아래와 같이 각자의 환경에 대한 선택하는 부분이 나온다.
1.3. .eslintrc.js 파일 수정
설치 기본
# .eslintrc.js
module.exports = {
"env": {
"browser": true,
"es2021": true
},
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:react/recommended"
],
"overrides": [
{
"env": {
"node": true
},
"files": [
".eslintrc.{js,cjs}"
],
"parserOptions": {
"sourceType": "script"
}
}
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module"
},
"plugins": [
"@typescript-eslint",
"react"
],
"rules": {
}
}
스토리북 적용
module.exports = {
env: {
browser: true,
node: true
},
extends: [ 'airbnb', 'airbnb/hooks', 'eslint:recommended', 'plugin:react/recommended', 'plugin:import/recommended', 'plugin:storybook/recommended' ],
ignorePatterns: [ '.storybook', '*.d.ts', 'node_modules', 'build', 'dist', '**/env/*.js' ],
overrides: [
{
files: [ '*.ts', '*.tsx' ],
rules: { 'no-undef': 'off' }
}
],
parser: '@typescript-eslint/parser',
parserOptions: { warnOnUnsupportedTypeScriptVersion: false },
plugins: [ '@typescript-eslint', 'sort-keys-fix', 'prettier' ],
rules: {
'@typescript-eslint/ban-ts-comment': [
'error',
{ 'ts-ignore': 'allow-with-description' }
],
'@typescript-eslint/no-explicit-any': 'warn',
'@typescript-eslint/no-unused-vars': 'error',
'array-bracket-spacing': [
'error',
'always',
{
arraysInArrays: false,
objectsInArrays: false
}
],
'brace-style': [ 'error', 'allman' ],
'comma-dangle': [ 'error', 'never' ],
'eol-last': [ 'error', 'never' ],
'import/extensions': 'off',
'import/named': 'off',
'import/no-anonymous-default-export': 'off',
'import/no-cycle': 'off',
'import/no-extraneous-dependencies': 'off',
'import/no-named-as-default': 'off',
'import/no-unresolved': 'off',
'import/order': [
'error',
{
alphabetize: {
caseInsensitive: true,
order: 'asc'
},
groups: [ 'external', 'builtin', 'internal', 'sibling', 'parent', 'index' ],
'newlines-between': 'always'
}
],
indent: [ 'error', 'tab' ],
'jsx-a11y/control-has-associated-label': 'off',
'jsx-quotes': [ 'error', 'prefer-single' ],
'linebreak-style': 'off',
'max-len': 'off',
'no-restricted-exports': 'off',
'no-tabs': [ 'error', { allowIndentationTabs: true }],
'no-unused-vars': 'off',
'object-curly-newline': [ 'error', {
ExportDeclaration: 'never',
ImportDeclaration: 'never',
ObjectExpression: {
minProperties: 3,
multiline: true
},
ObjectPattern: 'never'
}],
'react-hooks/exhaustive-deps': 'warn',
'react/button-has-type': 'off',
'react/destructuring-assignment': 'off',
'react/function-component-definition': 'off',
'react/jsx-curly-brace-presence': [
'error',
{
children: 'never',
props: 'never'
}
],
'react/jsx-filename-extension': 'off',
'react/jsx-indent': [ 'error', 'tab' ],
'react/jsx-props-no-spreading': 'off',
'react/jsx-sort-props': [
'error',
{
callbacksLast: true,
ignoreCase: true,
multiline: 'last',
noSortAlphabetically: false,
reservedFirst: false,
shorthandFirst: false,
shorthandLast: true
}
],
'react/prop-types': 'off',
'react/react-in-jsx-scope': 'off',
'react/require-default-props': 'off',
'require-jsdoc': 'off',
'sort-keys-fix/sort-keys-fix': 'error'
},
settings: {
'import/parsers': { '@typescript-eslint/parser': [ '.ts', '.tsx', '.js' ] },
react: { version: 'detect' }
}
};
2. Prettier 설치 및 설정
2.1. Prettier 의존성 설치
$ yarn add -D \
prettier \
eslint-plugin-prettier \
eslint-config-prettier
2.2. VSCode Extension 설치 (참조)
2.3. ignore 설정을 통해서 prettier를 적용하지 않을 부분 설정
# .prettierignore
**/*.css
**/*.scss
2.4. 파일 저장시 자동 format 설정
.vscode > settings.json에 옵션 추가
{
...
"editor.formatOnSave": true
...
}
주의!
yarn berry를 사용한다면 prettier설치해준 다음 아래 명령어를 실행시켜 주어야 한다. (참조)
$ yarn dlx @yarnpkg/sdks vscode
안하면 node-modules폴더가 없어서 Error: Cannot find module 'prettier' from 에러가 발생한다.