Web Front-End/React

Next.js 프로젝트 (2) - VSCode 기초 설정(Prettier, ESLint..etc)

여의도스토리 2020. 8. 10. 12:02

우선 React랑 살짝 다른게 React에서는 ESLint가 내장되어 있었지만 Next에서는 내장되어 있지 않았다..

따라서 ESLint, Prettier 를 설정해 주도록한다.! 당연.. 프로젝트 루트에서 설치!!

 

1. Prettier, ESLint 설치!!
$ yarn add prettier eslint --dev
$ yarn add --dev eslint-config-prettier eslint-plugin-prettier eslint-plugin-react

# prettier: 코드를 예쁘게 일관성 있게 정리해준다.

# eslint: 코딩 컨벤션 툴로.. 룰에 어것나는 것들은 경고, 에러를 발생 시켜 올바른 코딩을 할 수 있게 해준다.

# eslint-config-prettier: eslint의 포매팅 기능 off

# eslint-plugin-prettier: eslint에 prettier 포매팅 기능 on

# eslint-plugin-react: 리액트와 관련된 eslint 룰셋 기능 on

 

2. Prettier 설정

설정에는 다양한 옵션들이 있다. 특이한점은 루트 디렉토리에서 prettier 파일을 만들어줘야 동작한다.

루트에 ".prettierrc" 파일을 만들고 아래와 같은 옵션들을 취향에 맞게 명시한다.

{
  "trailingComma": "none", // array등에서 마지막 항목에 콤마를 붙일건지 말건지.. 안붙이게 설정
  "tabWidth": 2, // 탭 2칸
  "semi": true, // 세미콜론 있게 설정
  "singleQuote": true, // 따옴표
  "bracketSpacing": true, // 괄호 열었을때 공백 넣을지 여부
  "jsxBracketSameLine": true, // 멀티 라인에서 > 닫는부분을 < 와 맞출지 여부
  "printWidth": 200
}

프리티어 옵션 확인

 

3. ESLint 설정

린트 또한 프리티어만큼이나 옵션이 다양하다. 

린트 옵션 확인

Next에서는 parser부분에 bable-eslint 를 명시해줘야 에러 문구가 나타나지 않는다.

babel-eslint를 적용시키려면

$ yarn add babel-eslint --dev 

로 선 설치!!

옵션은 루트 디렉토리에서 ".eslintrc.json" 생성 후 아래 내용 입력!

옵션에 대한 속성들은 취향과 상황에 맞게 명시하면 된다.

{
  "parser": "babel-eslint",
  "parserOptions": {
    "ecmaVersion": 2020,
    "sourceType": "module",
    "ecmaFeatures": {
      "jsx": true
    }
  },
  "extends": [
    "plugin:react/recommended",
    "plugin:prettier/recommended"
  ],
  "rules": {
    "prettier/prettier": ["error", {
      "endOfLine": "auto"
    }],
    "react/prop-types": "off",
    "no-var": "error",
    "no-dupe-keys": "error"
  }
}

 

4. VSCode 설정

우선 기본적으로 Prettier, ESLint 확장팩을 설치해야한다..( 확장팩 검색-> 별 많은거로 설치)

"editor.formatOnSave": false // Prettier를 사용하기 위해 VSCode 자체 포매팅 off
"editor.tabSize": 2          // 일단 에디터에도 탭 눌렀을 때 두 칸 설정ㅋㅋ 이유는 가독성면에서 좋음
//"eslint.autoFixOnSave": true => Deprecated 된 프로퍼티 로써 저장시 ESLint를 통한 자동 수정을 위해서
"editor.codeActionsOnSave": { "source.fixAll.eslint": true } // => 로 대신 사용해야함
"eslint.validate": ["javascript", "javascriptreact", "typescript", "typescriptreact", "html", "vue", "css"],
  "[html]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode",
    "editor.tabSize": 2,
    "editor.formatOnSave": true
  },
  "[css]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode",
    "editor.tabSize": 2,
    "editor.formatOnSave": true
  },
 "[javascript]": {  // javascript 의 기본 포맷터는 prettier, 저장시 포매팅
    "editor.defaultFormatter": "esbenp.prettier-vscode",
    "editor.formatOnSave": true
 },
  "[typescript]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode",
    "editor.formatOnSave": true
  },
  "[typescriptreact]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode",
    "editor.formatOnSave": true
  }