여러 작업자들의 코딩 스타일을 일치시키기 위한 Lintter와 Code Formatter이다.
ESLint 공식 문서
ESLint is a tool for identifying and reporting on patterns found in ECMAScript/JavaScript code, with the goal of making code more consistent and avoiding bugs.
구글번역
ESLint는 ECMAScript/JavaScript 코드에서 발견된 패턴을 식별하고 보고하는 도구로, 코드의 일관성을 높이고 버그를 방지하는 것을 목표로 합니다.
즉, ESLint는 보다 좋은 품질의 자바스크립트 코드를 작성하기 위한 일종의 코드 스타일 가이드이다.
작성된 코드의 구문을 분석하여 버그가 발생할 여지가 있거나, 불필요한 코드, 혹은 보안상 위험한 코드 등에 대한 경고를 띄어준다.
Prettier 공식 문서
Prettier removes all original styling and ensures that all outputted code conforms to a consistent style.
구글번역
Prettier는 모든 원래 스타일을 제거하고 출력되는 모든 코드가 일관된 스타일을 준수하도록 합니다.
ESLint는 코드 자체의 문법 교정과 더불어 스타일링 기능도 포함되는 반면,
Prettier는 자동으로 코드의 스타일을 맞춰주는 보다 강력한 기능을 지원하기 때문에 ESLint와 함께 사용된다.
eslint-plugin-prettier
, eslint-config-prettier
를 함께 설치해서 사용하는 이유
.eslintrc
, .prettierrc
등의 설정파일을 활용하기 위해 설치한다.CRA(create-react-app)으로 시작할 경우, package.json에서 확인할 수 있듯이 ESLint는 기본적으로 설치되어있다.
설정 - Preference
에서 각각의 Extention 설정이 적용될 범위를 Commonly Used로 정해주면 된다..vscode
폴더가 생성되며 settings.json
이 해당 폴더 안에 생성된다..vscode
가 git에 함께 업로드 된다면, 이 파일이 포함된 프로젝트 폴더에서 작업을 하는 사용자는 해당 workplace에 대하여 .vscode/settings.json
에 작성된 값에 따른 동일한 설정을 적용받는다.eslint/prettier
뿐만 아니라 tap width/terminal
에 관한 설정 또한 포함되어 다른 팀원의 에디터의 영향을 미칠 수 있다..gitignore
에 추가하면 된다CRA에는 eslint가 내장되어있기 때문에 eslint는 추가설치할 필요가 없다
따라서 eslint 추가 설정을 위한 패키지만 설치해주면 된다.
$ npm install -D prettier eslint-config-prettier eslint-plugin-prettier
settings.json
-> .editorconfig
-> .prettierrc
의 순서로 설정이 적용된다.{
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.tabSize": 2,
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true,
},
"javascript.format.enable": false,
"eslint.alwaysShowStatus": true,
"files.autoSave": "onFocusChange"
}
{
"extends": ["react-app", "plugin:prettier/recommended"],
"rules": {
"no-var": "warn", // var 금지
"no-multiple-empty-lines": "warn", // 여러 줄 공백 금지
"no-nested-ternary": "warn", // 중첩 삼항 연산자 금지
"no-console": "warn", // console.log() 금지
"eqeqeq": "warn", // 일치 연산자 사용 필수
"dot-notation": "warn", // 가능하다면 dot notation 사용
"no-unused-vars": "warn", // 사용하지 않는 변수 금지
"react/destructuring-assignment": "warn", // state, prop 등에 구조분해 할당 적용
"react/jsx-pascal-case": "warn", // 컴포넌트 이름은 PascalCase로
"react/no-direct-mutation-state": "warn", // state 직접 수정 금지
"react/jsx-no-useless-fragment": "warn", // 불필요한 fragment 금지
"react/no-unused-state": "warn", // 사용되지 않는 state
"react/jsx-key": "warn", // 반복문으로 생성하는 요소에 key 강제
"react/self-closing-comp": "warn", // 셀프 클로징 태그 가능하면 적용
"react/jsx-curly-brace-presence": "warn", // jsx 내 불필요한 중괄호 금지
"prettier/prettier": [
"error",
{
"endOfLine": "auto",
"singleQuote": true, // 홑따옴표로 지정
"semi": false // 세미콜론제거
}
]
}
}
{
"tabWidth": 2,
"endOfLine": "lf",
"arrowParens": "avoid",
"singleQuote": true, // 자동으로 홑따옴표로 저장
"semi": false // 자동으로 세미콜론제거되면서 저장
}
package.json
에 담겨야 한다node_modules
폴더의 용량이 상당하기 때문에 다른 소스 코드들과 github에 함께 업로드 할 수 없기 때문이다.package.json
의 정보를 기반으로 -> 필요한 의존성들을 재구성(설치)하게 된다.