기존에 블로그에 작성했던 방식은 CRA를 이용한 eslint 및 pretiier 적용방법이였지만, 이번에는 webpack 설정에 이어 CRA를 이용하지 않고 적용하는 방법을 알아보고자 합니다.
시작하기 앞서
보통 airbnb 방식을 채택해서 사용하기 때문에 보편적으로 가장 많이 사용한다.
그리고, 회사마다 eslint,prettier 방식이 다르기 때문에 회사 프론트엔드 팀에 따라 맞게 사용하면 될 것 같아 크게 걱정할 필요는 없을 것 같다
npm i -D eslint eslint-config-airbnb eslint-plugin-import eslint-plugin-jsx-a11y eslint-plugin-react
npm i -D prettier eslint-config-prettier eslint-plugin-prettier babel-eslint
// .eslintrc
{
"env": {
"browser": true,
"es6": true
},
"extends": ["airbnb", "prettier", "prettier/react"],
"globals": {
"Atomics": "readonly",
"SharedArrayBuffer": "readonly"
},
"plugins": ["react", "prettier"],
"rules": {
"react/prop-types": 0,
"no-underscore-dangle": 0,
"import/imports-first": ["error", "absolute-first"],
"import/no-extraneous-dependencies": [
"error",
{
"devDependencies": true
}
],
"import/newline-after-import": "error",
"import/prefer-default-export": 0,
"react/prefer-stateless-function": 0,
"react/jsx-filename-extension": 0,
"react/jsx-one-expression-per-line": 0,
"linebreak-style": 0,
"no-unused-vars": 0
// ❗️error off : 0 , warning 1,❗️
}
}
// .prettierrc
{
"singleQuote": true,
"semi": true,
"useTabs": false,
"tabWidth": 2,
"trailingComma": "all",
"printWidth": 120,
"arrowParens": "avoid"
}
/*
문자열을 사용 할 때에는 ' 를 사용
코드는 ; 로 끝나야합니다.
탭 대신에 스페이스를 사용
들여쓰기 크기는 2칸
객체나 배열을 작성 할 때, 원소 혹은 key-value 의 맨 뒤에있는 것에도 쉼표 붙인다
한 줄이 120칸이 까지
화살표 함수 매개변수 하나인건 괄호 x
*/
npm install husky --save-dev
// package.json
"husky": {
"hooks": {
"pre-commit": "eslint . --fix && prettier --write"
}
},
// 여기서 eslint . --fix로는 현재 디렉토리의 모든 코드를 eslint를
// 사용해 자동으로 고친다는 의미입니다. 이 작업이 끝나면
// prettier --write를 실행해 prettier 규칙을 적용한 뒤 자동으로 수정
npm install lint-staged --save-dev
// package.json
"lint-staged": {
"*.js": ["eslint . --fix", "prettier --write"]
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
npm i --save-dev prettier-eslint
를 추가
{
"editor.formatOnSave": true,
"javascript.format.enable": false,
"prettier.eslintIntegration": true
}
npm i --save-dev eslint-config-airbnb
//eslintrc
{
"parser": "babel-eslint",
"extends": "airbnb",
"plugins": ["react", "jsx-a11y", "import"],
"rules": {
"react/jsx-filename-extension": 0
},
"env": {
"browser": true,
"node": true
}
}
참고사이트