ESLint
는 포맷팅 및 버그 방지였다면, Prettier
는 포맷팅에 집중하여 코드를 더 예쁘게 만드는 도구이다. 반면 ESLint
처럼 버그 방지와 같이 코드 품질과 관련된 기능은 하지 않는다.
npm install prettier
app.js
를 다음과 같이 작성했다.
여기에 prettier
명령어를 적용해보자.
npx prettier app.js
코드에 세미콜론이 붙어서 나왔다.
--write
옵션을 더해주면 prettier
가 파일을 직접 다듬어준다.
걸린 시간을 출력해준다.
파일의 내용에 세미콜론이 추가되어 있다.
eslint
가 고칠 수 없는, 개발자가 고쳐야 하는 코드도 prettier
가 자동으로 고쳐준다는 장점이 있다. eslint
는 버그를 유발할 수 있는 코드에 대해 경고한다면 prettier
는 스타일이 맞지 않는 코드에 대한 경고를 한다.
그래서 둘을 혼용하면 버그를 유발하지도 않으면서, 스타일도 예쁜 코드 규칙을 지켜나갈 수 있을 것이다.
prettier
와 eslint
를 잘 통합할 수 있게 개발자들은 eslint-config-prettier
라는 것을 제공하는데, 이는 프리티어와 충돌하는 ESLint의 규칙을 끄는 역할을 한다. 둘 다 사용하는 경우 규칙이 충돌하기 때문이다.
npm i -D eslint-config-prettier
module.exports = {
env: {
browser: true,
commonjs: true,
es2021: true,
node: true,
},
extends: [
"eslint:recommended",
"eslint-config-prettier"
],
parserOptions: {
ecmaVersion: 12,
},
rules: {},
};
extends
에 두개의 패키지를 적용했다. ESLint
는 중복 세미콜론 사용을 검사하는데, 사실 Prettier
도 마찬가지로 검사한다. 그래서 어느 한쪽의 규칙은 꺼야 하는데 eslint-config-prettier
를 하면 eslint
가 prettier
의 규칙을 상속(extends)하여 중복되는 ESLint
규칙을 비활성화한다.
eslint-config-prettier 공식 리포지토리에 가면 상세한 설명이 있다.
eslint
는 prettier
와 중복되는 규칙인 '중복 세미콜론'을 off
한 상태여서 저게 딱히 오류로 집히지 않는다. 저 부분은 prettier
가 처리해줄 것이라고 믿고 있는 것이다.
--fix
명령어를 입력해서 검증을 해봐도, 중복 세미콜론에 대한 에러는 잡히지 않아서 소스코드가 고쳐지지 않는다.
위와 같이 prettier app.js --write
를 하면, 소스코드에 중복된 세미콜론을 제거해준다.
eslint-config-prettier
로 설정에 대한 통합을 했는데, 아직 실행은 eslint
와 prettier
를 따로따로 시켜야 했다. 실행마저 통합시켜보자.
npm install eslint-config-prettier
module.exports = {
env: {
browser: true,
commonjs: true,
es2021: true,
node: true,
},
extends: [
"eslint:recommended",
"eslint-config-prettier"
],
plugins: [
"prettier"
],
parserOptions: {
ecmaVersion: 12,
},
rules: {
"prettier/prettier": "error"
},
};
plugins
배열에 prettier
를 추가했다.rules
에 prettier/prettier
를 추가했다.이제 eslint
에서 prettier
룰에 어긋나는 코드도 잡아내게 되었다.
module.exports = {
env: {
browser: true,
es2021: true,
node: true,
},
extends: ["eslint:recommended", "plugin:prettier/recommended"],
parserOptions: {
ecmaVersion: 12,
}
};
위와 같이 extends
에 plugin:prettier/recommended
로 하면 더 쉽게 통합할 수 있다.