서버 초기화 과정에서 린팅, 포맷팅, 환경변수 등을 설정하면서 고민하고 찾은 내용을 정리해보고자 한다!
Typescript의 정적 타입 검사와 더불어 코드 포맷팅, 잠재적 버그 방지를 통해 프로젝트의 유지 보수성과 안정성을 높일 수 있다!
개발자도 사람이기 때문에 실수할 수 있고,각자 선호하는 코딩 스타일이 다르다. printWidth
를 작게 두어 줄 바꿈이 많게 두거나 크게 두어 한 줄에 보는 사람도 있다. 협업을 하게 되는 경우엔 이러한 차이로 코드 리뷰가 원활하지 못할 수도 있기 때문에 ESLint와 Prettier가 필요하다!
# 기본 패키지
pnpm add -D eslint prettier typescript
# 새로운 ypescript-eslint 패키지
pnpm add -D typescript-eslint
# Prettier와 ESLint 통합을 편리하게 해주는 패키지
pnpm add -D eslint-config-prettier eslint-plugin-prettier
@typescript-eslint/parser
와 @typescript-eslint/eslint-plugin
는 레거시 버전으로 이젠 typescript-eslint로 한 번에 통합하여 사용할 수 있다! 설치할 패키지가 줄어들고, flat config 방식 사용하여 설정이 간단해졌다!
참고: typescript-eslint는 최신 통합 패키지로, Node.js v16.20 이상, ESLint 8.21.0 이상 필요
typescript-eslint 공식 문서
.eslintrc.* 는 레거시 버전으로
파일 생성 및 설정은 flat config인 .eslint.config.js으로 설정한다!
import typescriptEslint from 'typescript-eslint';
import eslintPluginPrettier from 'eslint-plugin-prettier';
import eslintCongigPrettier from 'eslint-config-prettier';
export default typescriptEslint.config({
files: '**/*.ts',
// Prettier 규칙을 ESLint 통합
plugins: { prettier: eslintPluginPrettier },
extends: [
eslintCongigPrettier, // ESLint와 Prettier 충돌 방지
],
rules: {
// any 타입 사용 금지
'@typescript-eslint/no-explicit-any': 'error',
// 미사용 변수 에러 처리
'@typescript-eslint/no-unused-vars': 'error',
// Promise 반환 함수에 async 키워드 강제
'@typescript-eslint/promise-function-async': 'error',
// 함수 반환 타입 명시 필수
'@typescript-eslint/explicit-function-return-type': 'warn',
// 타입 단언보다 타입 선언 사용 권장
'@typescript-eslint/consistent-type-assertions': ['error', { assertionStyle: 'never' }],
// Prettier 규칙을 ESLint 에러로 표시
'prettier/prettier': 'error',
},
});
{
"printWidth": 120, // 한 줄의 최대 길이
"singleQuote": true, // 작은 따옴표 사용
"semi": true, // 문장 끝 세미콜론 사용
"tabWidth": 2, // 들여쓰기 간격
"arrowParens": "always" // 화살표 함수에 매개변수 괄호 항상 사용
}
최소한의 설정을 진행했다.
// package.json
"scripts": {
// ...
"lint": "eslit src/**/*.ts",
"format": "prettier --write src/**/*.ts"
},
// .prettierignore
# 의존성 관련
node_modules
pnpm-lock.yaml
# 빌드 결과물
dist
build
# 환경설정
.env*
# IDE 설정
.vscode
.idea
# 로그파일
logs
*.log
# OS 파일
.DS_Store
Thumbs.db
# TypeScript
*.tsbuildinfo
.pnpm
.eslintcache
이전에는 부트캠프에서 배운 대로 설정만 복사-붙여넣기로 사용했지만, 이번 기회에 각 도구의 역할과 설정의 의미를 자세히 이해하게 되었다. 특히 typescript-eslint의 새로운 통합 패키지와 flat config 방식을 적용하면서 더 최신의, 효율적인 설정 방법을 익힐 수 있었다.
https://github.com/airbnb/ts-migrate
https://github.com/google/eslint-config-google
https://github.com/standard/eslint-config-standard
핫한 버전으로 적용하는게 좋은데요? airbnb 린팅 규칙과 같은 외부 유명 standard 는 어떤가요?!