Package Manager은 yarn
을 사용했고, Vite
빌드툴을 사용했다.
: ES(EcmaScript) + Lint
- EcmaScript는 JavaScript를 의미하고 Lint는 프로그래밍 쪽의 언어로 해석하면 에러가 있는 코드에 표시를 달아놓는 것을 의미
- 따라서
ESLint
는 JavaScript언어에서 에러가 있는 코드에 표시를 달아놓는 도구!
확장성
이 높기 때문에 요즘 널리 쓰인다.
Prettier
은코드 포맷터(Code Formatter)
중 하나로, 작성된 코드의 스타일을 일관되게 유지해주면서 보기 좋게 정렬해주는 기능을 제공하는 도구이다.
ESLint는 Linter이고 Prettier은 Formatter라는 점에서 차이가 있다!
1. 명령어 입력
yarn add -D eslint
-D 옵션을 사용해서 package.json에 개발 의존성(devDepenencies)으로 기록되게 한다.
관련 자료
2. Extension 설치
3. .eslintrc 파일 생성
yarn create @eslint/config
초기에 만들어진 .eslintrc 파일은 다음과 같다
{
"env": {
"browser": true,
"es2021": true
},
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:react/recommended"
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": "latest"
},
"plugins": [
"@typescript-eslint",
"react"
],
"rules": {
}
}
env
: 사용 환경 의미extends
: 확장 기능 사용parserOptions
: 버전과 모듈 사용 여부plugins
: 사용되는 플러그인rules
: 세부 규칙 추가규칙과 parserOptions 몇 개 추가한 모습은 다음과 같다.
{
"env": {
"browser": true,
"es2021": true
},
"plugins": ["@typescript-eslint", "react", "react-hooks", "import", "jsx-a11y"],
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:react/recommended",
"plugin:import/recommended",
"plugin:jsx-a11y/recommended" // jsx 접근성 규칙에 대한 검사기
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": "latest", // 사용할 ECMAScript 버전을 설정
"ecmaFeatures": { // ECMAScript의 언어 확장 기능을 설정
"jsx": true // ECMScript 규격의 JSX 사용 여부
},
"sourceType": "module"
},
"ignorePatterns": ["build", "dist", "public"], // lint 무시 파일 정하기
"rules": {
"react/jsx-filename-extension": ["warn", { "extensions": [".tsx"] }], // "warn": 규칙을 경고로 사용
"react/react-in-jsx-scope": "off", // react 17부턴 import react가 필요없는데 off해두지 않으면 에러뜸
"react/jsx-uses-react": "off",
"no-duplicate-imports": "error", // 중복 Import 금지
"no-console": ["warn", { "allow": ["warn", "error", "info"] }], // 콘솔은 확인 뒤 지우기
"no-unused-vars": "error", // 사용하지 않는 변수 error처리
"no-multiple-empty-lines": "error", //공백 금지
"no-undef": "error", // 정의 안 한 변수 사용 x
"indent": "off", // 프리티어 충돌로 인한 OFF
"no-trailing-spaces": "error", // 쓸데없는 공백 없애기
"import/newline-after-import": ["error", { "count": 1 }], // import 구문들 뒤에 한 칸 띄우고 코드 작성
"react-hooks/rules-of-hooks": "error", // 리액트 훅의 순서를 지키게끔 한다. (React는 Hook이 호출되는 순서에 의존하기 때문에)
"arrow-parens": ["error", "always"], // arrow-function 인자가 2개 이상이면 괄호 필수
"no-multi-spaces": "error", // 스페이스 여러개 금지
"import/no-unresolved": "off", // 타입스크립트에서 경로를 제대로 잡지 못할 때 사용 or eslint-import-resolver-typescript 설치
"import/order": [
"error",
{
"groups": ["builtin", "external", "internal", ["parent", "sibling"], "index"], //import 순서를 고정. builtin- 외부- 내부
"pathGroups": [
// react 컴포넌트가 builtin 뒤에 (external import 앞에 나오도록 설정)
{ "pattern": "react", "group": "builtin", "position": "after" },
{ "pattern": "react-dom", "group": "builtin", "position": "after" }
],
"pathGroupsExcludedImportTypes": ["react", "react-dom"], // pathGroups가 올바르게 적용하기 위해.. (확실치 않음)
"alphabetize": {
"order": "asc", // 알파벳 순서 정렬 방식
"caseInsensitive": true // 알파벳 대소문자 구분
},
"newlines-between": "always" // group들 사이마다 개행 적용 (group 내부에서 개행 적용 불가)
}
]
}
}
1. 명령어 입력
yarn add --dev --exact prettier
2. prettierrc.json 파일 생성
echo {}> .prettierrc.json
3. Extension 설치
4. ESLint와 Prettier 연결
yarn add -D eslint-plugin-prettier
5. .eslintrc.js 파일의 "extends" 배열에 "prettier"를 추가한다.
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:react/recommended",
"plugin:import/recommended",
"plugin:jsx-a11y/recommended", // jsx 접근성 규칙에 대한 검사기
"plugin:prettier/recommended" // prettier 추가
],
6. .prettierrc.json 파일 내용 채우기
{
"printWidth": 100, // 줄 바꿈 할 폭 길이
"tabWidth": 2, // 탭 너비
"singleQuote": true, // single 쿼테이션 사용 여부
"trailingComma": "all", // 객체나 배열의 마지막 원소 끝에도 ,를 사용할지에 대한 옵션이다.
"bracketSpacing": true,
"semi": true, // 끝에 세미콜론 사용 여부
"useTabs": false,
"endOfLine": "lf",
"bracketSameLine": false,
"arrowParens": "always" // 화살표 함수 괄호 사용 방식
}
+) 빼먹은 부분 정리😂
고맙게도 리드 오빠가 테스트 해주면서 빼먹은 부분 피드백해줬다!✨
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-jsx-a11y": "^6.8.0",
요 두 개를 빼먹어서 저장할 때 자동으로 eslint 적용이 안됐다
다음과 같은 명령어를 작성하면 설치할 수 있다.👍
yarn add -D eslint-plugin-import eslint-plugin-jsx-a11y
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"lint": "eslint './/*.{ts,tsx,js,jsx}'",
"lint:fix": "eslint --fix './/*.{ts,tsx,js,jsx}'",
"preview": "vite preview"
},
1. 파일 경로 입력해서 직접 테스트
yarn eslint src/pages/Page1.tsx
2. package.json 파일에 lint 명령어를 정의 -> yarn lint
명령어 사용
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"lint": "eslint './/*.{ts,tsx,js,jsx}'",
"lint:fix": "eslint --fix './/*.{ts,tsx,js,jsx}'",
"preview": "vite preview"
},
여기 스크립트에서 정의해준대로 명령어를 사용하면 된다☺️👍
yarn lint
명령어를 쓰면 yarn eslint './/*.{ts,tsx,js,jsx}
명령어가 실행된다!