🎉 berenickt 블로그에 온 걸 환영합니다. 🎉
Front
ESLint & Prettier
코드 포맷터 & 린터 설정

코드 포멧터 & 린터

1. 코드 포멧터 & 린터

팀단위로 코딩을 하면, 각자의 코드 스타일이 다르게 됩니다. 다양한 사람들고 협업을 할 떄, 일정한 규칙을 정하게 되면, 일이 조금 더 수월하게 진행이 가능합니다.


1.1 코드 린터

  • 문법에서 에러는 아니지만 에러로 약속하자고 규칙을 정하는 것
  • 에러는 아니라 규칙에 어긋나는가를 검사하기 때문에 vscode에서 빨간 줄이 그여도 실행하는데는 아무 문제가 없다.
    • e.g. import 순서, ==금지 등
  • 또한 eslint자체에 포메터 기능도 어느정도 가지고 있다.

1.2 코드 포메터

  • 코드를 보기 좋게 만들어주는 것
  • e.g. 띄어쓰기 2칸,-길이 넘으면 줄바꿈 하기 등

2. ESLint

  1. VSCode에서 ESLint를 설치
  2. next.js는 packge.json에 들어가보면, eslint가 같이 설치된다.
1
# ESLint 패키지 설치
2
$ yarn add eslint --dev
3
# ESLint 초기화
4
$ npx eslint --lint
5
## .eslintrc.json 파일에 원하는 ESLint rules 적용
6
7
# eslint를 어떤식으로 사용할지에 대한 질문
8
How would you like to use ESlint ? => syntax, problems, code style
9
# 자바스크립트 뭐쓰고 있는지 묻는것
10
Waht type of modiles does your project use? => Javascript modules (import/export)
11
# react를 선택
12
Which framework does your project use? => react
13
# 타입스크립트 사용유무
14
Does your project use TypeScript? => Yes
15
# 어디서 실행하는지 확인
16
Where does your code run? => Browser
17
# 인기있는 가이드를 할지, 커스텀을 할 지 선택
18
How would you like to define a style for your project? => Use a popular style guide
19
Which style guide do you want to follow? => standard
20
# 설정파일을 뭘로 만들지 물어보는 질문
21
What format do you want your config file to be in? => Javascript
22
# 어떤 패키지 매니저로 설치할지
23
Which package manager do you want to use? => yarn

💡 npx : 기능을 실행하기 위한 도구를 다운로드 받고, 기능을 실행 후 다운로드 받았던 도구를 삭제하는 명령어

eslintrc.js에 들어가서, rules에 불편한 규칙을 추가하고, 해당 규칙을 off 해주시면 된다.

1
// 필요없는 규칙은 off해서 끄면 된다.
2
rules: {
3
'react/react-in-jsx-scope': 'off',
4
'react/prop-types': 'off'
5
}

2.1 ESLint에 잡힌 오류 확인

1
# .은 모든 파일을 의미
2
$ npx eslint .
3
4
# . 이 안될 경우에는, ""안의 형태로 끝나는 파일을 모두 검사하는 명령어로 입력
5
npx eslint "**/*.{ts,tsx}"

2.2 .eslintignore 파일

Typescript의 type 파일같은 eslint에서 제외해야 하는 경우에 사용


2.3 ESLint 설정 예시

1
{
2
"extends": [
3
"next/core-web-vitals",
4
"plugin:prettier/recommended", // Next.js에 Prettier 적용
5
"plugin:storybook/recommended" // Storybook ESLint 규칙 적용
6
],
7
"plugins": ["prettier"],
8
/**
9
* @see https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/order.md
10
*/
11
"rules": {
12
"prettier/prettier": "error",
13
"react-hooks/rules-of-hooks": "warn",
14
"react/display-name": "warn",
15
// “Import/order “ ESLint Rule 설정
16
"import/order": [
17
"error",
18
{
19
// Import group 사이에 개행 항상 추가
20
"newlines-between": "always",
21
// Import 순서는 알파벳 오름차순으로 정렬
22
"alphabetize": {
23
"order": "asc",
24
"caseInsensitive": true // 대소문자 구분 없이 정렬
25
}
26
}
27
]
28
}
29
}
  • 프로젝트 루트 디렉토리에 .eslintrc.json 파일에 위와 같이 입력
  • 다음 명령어로 전체 프로젝트 lint 검사: yarn lint
  • Error 내용만 보고싶다면 다음과 같이 입력: yarn lint —quiet

3. Prettier

3.1 VScode 설정

  • VScode extension에서 Prettier를 설치
  • Format on Save 확인
    • vscode 설정에서 format on save를 입력하고 나오는 설정에 체크되어 있는 지 확인
  • Default Formatter 확인
    • 설정이 prettier format (esbenp.prettier-vscode) 로 설정되어 있는 지 확인

3.2 prettier 프로젝트 설치 및 세팅

1
# prettier 패키지 설치
2
yarn add --dev --exact prettier
3
4
# 루트 디렉토리에 .prettierrc 파일 생성
5
node --eval "fs.writeFileSync('.prettierrc','{}\n')"
6
7
# 모든 파일에 prettier 적용
8
yarn prettier . —write

echo {}> .prettierrc.json 명령어로 .prettierrc.json 설정파일을 생성

cf. https://prettier.io/docs/en/install.html


3.3 VScode 설정을 파일로 관리

1
{
2
"editor.formatOnSave":ture,
3
"editor.defultFormatter": "esbenp.prettier-vscode"
4
}
  • 최상단 경로에 .vscode 폴더를 생성해 준 후 안쪽에 settings.json 파일 생성
  • 파일까지 채워주고 나면, 코드의 정렬을 맞추지 않아도 자동으로 코드의 정렬함

3.4 ESLint와 Prettier 연결

각 패키지 매니저에 따라 아래의 명령어로 eslint-config-prettier를 설치

1
$ npm install --save-dev eslint-config-prettier
2
$ yarn add eslint-config-prettier --dev

.eslintrc.js 파일 안에서 “extends” 배열에 “prettier”를 추가

1
{
2
"extends": ["plugin:react/recommended", "standard-with-typescript", "prettier"]
3
}

3.5 prettier 설정대로 수정

1
# 모든 폴더 prettier 적용
2
$ npx prettier . --write

4. 자주 사용하는 ESLint & Prettier

4.1 ESLint

주석 설명

.eslintrc.json
1
{
2
"extends": [
3
"next/core-web-vitals",
4
"plugin:prettier/recommended", // Next.js에 Prettier 적용
5
"plugin:storybook/recommended" // Storybook ESLint 규칙 적용
6
],
7
"plugins": ["prettier"],
8
/**
9
* @see https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/order.md
10
*/
11
"rules": {
12
"prettier/prettier": "error",
13
"react-hooks/rules-of-hooks": "warn",
14
"react/display-name": "warn",
15
// “Import/order “ ESLint Rule 설정
16
"import/order": [
17
"error",
18
{
19
// Import group 사이에 개행 항상 추가
20
"newlines-between": "always",
21
// Import 순서는 알파벳 오름차순으로 정렬
22
"alphabetize": {
23
"order": "asc",
24
"caseInsensitive": true // 대소문자 구분 없이 정렬
25
}
26
}
27
]
28
}
29
}

주석 제거

.eslintrc.json
1
{
2
"extends": ["next/core-web-vitals", "plugin:prettier/recommended", "plugin:storybook/recommended"],
3
"plugins": ["prettier"],
4
5
"rules": {
6
"prettier/prettier": "error",
7
"react-hooks/rules-of-hooks": "warn",
8
"react/display-name": "warn",
9
"import/order": [
10
"error",
11
{
12
"newlines-between": "always",
13
"alphabetize": {
14
"order": "asc",
15
"caseInsensitive": true
16
}
17
}
18
]
19
}
20
}

4.2 Prettier

주석 설명

.prettierrc
1
{
2
// 1. 홑따옴표
3
"singleQuote": true,
4
// 2. 한 줄 최대 글자수
5
"printWidth": 80,
6
// 3. 세미콜론
7
"semi": false,
8
// 4. 배열이나 객체, 매개변수가 작성된 경우 마지막 요소 뒤에도 ,기호(쉼표)를 붙여주기
9
// 기본값 : all
10
"trailingComma": "all",
11
// 5. 화살표 함수 매개변수가 하나일 때는 굳이 () 기호를 사용하고 싶지 않다면
12
"arrowParens": "avoid",
13
// 6. 탭 문자 대신에 여러 개의 공백 문자를 사용 여부
14
"useTabs": false,
15
// 7. 탭 너비
16
"tabWidth": 2,
17
// 8. 객체 리터럴 사용시 괄호에 공백 삽입 여부 (default: true)
18
"bracketSpacing": true,
19
// 9. JSX의 마지막 `>`를 다음 줄로 내릴지 여부
20
"jsxBracketSameLine": true,
21
// 10. vue 파일의 script와 style태그 들여쓰기 여부
22
"vueIndentScriptAndStyle": false,
23
// 11. 맨마지막 줄 넣는지 여부
24
"endOfLine": "auto",
25
// 12. 이 확장 기능을 비활성화 할 언어 ID 목록
26
"disableLanguages": ["vue"]
27
}

주석 제거

.prettierrc
1
{
2
"singleQuote": true,
3
"printWidth": 80,
4
"semi": false,
5
"trailingComma": "all",
6
"arrowParens": "avoid",
7
"useTabs": false,
8
"tabWidth": 2,
9
"bracketSpacing": true,
10
"jsxBracketSameLine": true,
11
"vueIndentScriptAndStyle": false,
12
"endOfLine": "auto"
13
}

5. Husky

  • Husky : git에 commit 하기 전에, 기존의 규칙(typescript, eslint, prettier 등)을 지켜가면서 코딩을 진행하였는지 검증해 주는 도구
  • 규칙에 어긋나는 코드가 있다면 commit을 강제로 거절
1
yarn add -D husky@4
2
yarn add --dev lint-staged

package.json 파일에 husky와 lint-staged 내용을 작성

1
{
2
// ...
3
"devDependencies": {
4
// ...
5
},
6
"husky": {
7
"hooks": {
8
"pre-commit": "lint-staged"
9
}
10
},
11
"lint-staged": {
12
"**/*.{ts,tsx}": ["npx eslint ."]
13
}
14
}