코드 포멧터 & 린터
1. 코드 포멧터 & 린터
팀단위로 코딩을 하면, 각자의 코드 스타일이 다르게 됩니다. 다양한 사람들고 협업을 할 떄, 일정한 규칙을 정하게 되면, 일이 조금 더 수월하게 진행이 가능합니다.
1.1 코드 린터
- 문법에서 에러는 아니지만 에러로 약속하자고 규칙을 정하는 것
- 에러는 아니라 규칙에 어긋나는가를 검사하기 때문에 vscode에서 빨간 줄이 그여도 실행하는데는 아무 문제가 없다.
- e.g. import 순서, ==금지 등
- 또한 eslint자체에 포메터 기능도 어느정도 가지고 있다.
1.2 코드 포메터
- 코드를 보기 좋게 만들어주는 것
- e.g. 띄어쓰기 2칸,-길이 넘으면 줄바꿈 하기 등
2. ESLint
- VSCode에서 ESLint를 설치
- next.js는
packge.json에 들어가보면, eslint가 같이 설치된다.
1# ESLint 패키지 설치2$ yarn add eslint --dev3# ESLint 초기화4$ npx eslint --lint5## .eslintrc.json 파일에 원하는 ESLint rules 적용67# eslint를 어떤식으로 사용할지에 대한 질문8How would you like to use ESlint ? => syntax, problems, code style9# 자바스크립트 뭐쓰고 있는지 묻는것10Waht type of modiles does your project use? => Javascript modules (import/export)11# react를 선택12Which framework does your project use? => react13# 타입스크립트 사용유무14Does your project use TypeScript? => Yes15# 어디서 실행하는지 확인16Where does your code run? => Browser17# 인기있는 가이드를 할지, 커스텀을 할 지 선택18How would you like to define a style for your project? => Use a popular style guide19Which style guide do you want to follow? => standard20# 설정파일을 뭘로 만들지 물어보는 질문21What format do you want your config file to be in? => Javascript22# 어떤 패키지 매니저로 설치할지23Which package manager do you want to use? => yarn
💡
npx: 기능을 실행하기 위한 도구를 다운로드 받고, 기능을 실행 후 다운로드 받았던 도구를 삭제하는 명령어
eslintrc.js에 들어가서, rules에 불편한 규칙을 추가하고, 해당 규칙을 off 해주시면 된다.
1// 필요없는 규칙은 off해서 끄면 된다.2rules: {3'react/react-in-jsx-scope': 'off',4'react/prop-types': 'off'5}
2.1 ESLint에 잡힌 오류 확인
1# .은 모든 파일을 의미2$ npx eslint .34# . 이 안될 경우에는, ""안의 형태로 끝나는 파일을 모두 검사하는 명령어로 입력5npx 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.md10*/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 패키지 설치2yarn add --dev --exact prettier34# 루트 디렉토리에 .prettierrc 파일 생성5node --eval "fs.writeFileSync('.prettierrc','{}\n')"67# 모든 파일에 prettier 적용8yarn prettier . —write
echo {}> .prettierrc.json 명령어로 .prettierrc.json 설정파일을 생성
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-prettier2$ 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.md10*/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"],45"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": true16}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// 기본값 : all10"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}
- cf. 그 외 옵션 : https://prettier.io/docs/en/options
주석 제거
.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을 강제로 거절
1yarn add -D husky@42yarn 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}