[VSCODE] ESlint/Prettier ์ค์ ํ๊ธฐ
์ฌ๋๋ค์ด ๋ง์ด ์ฌ์ฉํ๋ ์๋ํฐ์ธ Visual Studio Code(VSCODE)์ ๋ค๊ฐ ์ฝ๋ ํฌ๋งทํฐ์ธ Prettier์
ES๋ฌธ๋ฒ ์ฒดํฌ์ธ Eslint๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ๋ฒ๊ฒ์ฌ๋ฅผ ํ ์ ์๋ ์ค์ ์ ์ก์๋ณด๋ ค ํ๋ค.
์ฝ๋๊ฐ ๊ท์น์ฑ์์ด ์์ฑํ๊ฑธ ์ซ์ดํ๋ ๋๋ก์จ ์ด ๋๊ฐ๋ฅผ ์ค์ ํ๋ค ๋ญ์ง ๋ชจ๋ฅด๊ฒ ๋ง์์ ํธ์ํจ์ ๊ฐ์ง์ ์์๋ค.
์ผ๋จ VSCODE๋ ์ค์น๋์๋ค๋ ๊ฐ์ ํ๊ฒ ์์ฑํ๊ฒ ๋ค.
1. VSCODE Extensions๋ฅผ ํตํด์ ๋จผ์ Prettier ๊ณผ ESlint๋ฅผ ์ค์นํด์ฃผ์ด์ผํ๋ค.
2. ํ์ํ Npm ํจํค์ง๋ฅผ ๋ค์ด๋ก๋ ๋ฐ์์ผ ํ๋ค.
์ผ๋จ Npm ํ๋ก์ ํธ๋ฅผ ํ๋ ๋ง๋ค์ด ๋ณธ๋ค.
// -y๋ init์ ํ๋ฉด ๋ฌผ์ด๋ณด๋ ์ง๋ฌธ์ ๋ชจ๋ Yes๋ฅผ ์๋์ ์ผ๋ก ํด์ค๋ค.
npm init -y
๊ทธ๋ฌ๋ฉด ๋๋ ํ ๋ฆฌ์ package.json๋ผ๋ ํ์ผ์ด ์๊ฒผ์๊ฒ์ด๋ค.
์ด์ ํ์ํ Npm ํจํค์ง๋ฅผ ๋ค์ด๋ฐ์์ผ ํ๋ค.
๊ณตํต์ ์ผ๋ก๋ ์๋์ ๊ฐ์ ํจํค์ง๋ฅผ ๋ค์ด๋ฐ๋๋ค.
- eslint
- prettier
- eslint-config-prettier
- eslint-plugin-prettier
npm install eslint prettier eslint-config-prettier eslint-plugin-prettier --save-dev
๋ค์ด๋ก๋๊ฐ ์๋ฃ๋๋ฉด ์ด์ ES6์ ๊ดํ ๊ท์น์ด ์ฌ๋ฌ๊ฐ์ง๊ฐ ์กด์ฌํ๋๋ฐ ๋ณธ์ธ์ ๊ทธ์ค์์ ๊ฐ์ฅ ๋ณดํธ์ ์ผ๋ก
์ฌ์ฉ๋๋ airbnb์ ์ฌ์ฉํด๋ณผ ์์ ์ด๋ค.
์ฌ๊ธฐ์ ํ๊ฐ์ง airbnb์๋ airbnb๊ณผ airbnb-base๊ฐ ์กด์ฌํ๋๋ฐ airbnb-base๋ React๊ด๋ จ ๊ท์น์ด ๋น ์ ธ์๋ค.
๋๋ ์ง๊ธ์ ๊ฐ๋จํ jsํ์ผ์ ์์ฑํด์ ํ
์คํธ ํด๋ณผ์์ ์ด๊ธฐ ๋๋ฌธ์ airbnb-base๋ฅผ ๋ค์ด๋ก๋ ํ๊ฒ ๋ค.
airbnb-base ๋ค์ด๋ฐ๊ธฐ ์ํด์๋ ๊ทธ์ ๊ด๋ จ๋ ํจํค์ง๋ค์ ๋ชจ๋ ๋ค์ด๋ฐ์์ผํ๋๋ฐ ํด๋น ๋ฌธ์ฅ์ ํตํด ํ์ธ ํ ์ ์๋ค.
npm info "eslint-config-airbnb-base@latest" peerDependencies
// ์๋์ ๊ฐ์ด ๋์จ๋ค. airbnb์ ์ฌ์ฉํ์
จ๋ ๋ถ์ React๊ด๋ จ๋๊ฒ ๊น์ง ์ข ๋ ๋ง์ด ๋์จ๋ค.
{ eslint: '^5.16.0 || ^6.1.0',
'eslint-plugin-import': '^2.18.2' }
๋ ธ๋ 5+ ์ด์์ ์ฌ์ฉํ์๋ ๋ถ์ด๋ผ๋ฉด ์๋์ ๊ฐ์ด npx๋ฅผ ์ฌ์ฉํ์๋ฉด ๊ด๋ จ ํจํค์ง๊น์ง ์ ๋ถ ํ๋ฒ์ ๋ค์ด๋ก๋๊ฐ ๊ฐ๋ฅํ๋ค.
npx install-peerdeps --dev eslint-config-airbnb-base
๋ค์ด๋ก๋๊ฐ ์๋ฃ๋๋ฉด ์๋์ ๊ฐ์ด ๋์ค๋ฉด ์ ์์ ์ผ๋ก ๋ชจ๋ ๋ค์ด๋ก๋๊ฐ ์๋ฃ๋๊ฒ์ด๋ค.
"devDependencies": {
"eslint": "^6.1.0",
"eslint-config-airbnb-base": "^14.0.0",
"eslint-config-prettier": "^6.5.0",
"eslint-plugin-import": "^2.18.2",
"eslint-plugin-prettier": "^3.1.1",
"prettier": "^1.18.2"
}
์ ์ด์ ๊ฑฐ์ ๋ค์๋ค. Root๋๋ ํ ๋ฆฌ์ ํด๋น ๋๊ฐ์ ํ์ผ์ ๋ง๋ค์ด์ ๋ณต์ฌํ์ฌ์ค๋ค.
์๋์ ๋๊ฐ์ ํ์ผ์ ๋ณธ์ธ์ ์
๋ง์ ๋ง๊ฒ ์์ ํด์ ์ฌ์ฉํ๋ฉด ๋๋ค. ์ผ๋จ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ค์ ๋ง ํด๋ ์ํ์ด๋ค.
Prettier, ESlint ๊ณต์ ํํ์ด์ง๋ฅผ ์ฐธ์กฐํ๋ฉด ์ค์ ์ ๋ ๋ค์ํ๊ฒ ํ ์ ์๋ค.
Prettier
ESlint
.eslintrc.json
{
"extends": ["airbnb-base", "plugin:prettier/recommended"],
"plugins": ["prettier"],
"rules": {
"prettier/prettier": "error"
}
}
.prettierrc
{
"printWidth": 150
}
ํ ์คํธํด๋ณผ ํ์ผ ํ๋๋ฅผ ์์ฑํด๋ณผ๊ฑฐ๋ค. index.js๋ฅผ Root ๋๋ ํ ๋ฆฌ์ ์๋์ ๊ฐ์ด ๋ฌธ๋ฒ๊ณผ ์ ๋ ฌ์ด ๋ง์ง ์๋ ์ฝ๋๋ฅผ ์์ฑํด์ค๋ค.
index.js
var a = 2;
const b = 3;
let c = '1';
๊ทธ๋ฆฌ๊ณค Shift + Alt + F๋ฅผ ๋๋ฌ๋ณด์. ์๋์ ๊ฐ์ด ์๋์ ์ผ๋ก โ->โ๋ก ๋ณ๊ฒฝ ๋ณ์ ์ ์ธ ์ฌ์ด์ ๋์ด์ฐ๊ธฐ ์ค๋ง์ถค ๋ฑ ์๋์ ์ผ๋ก ์ฝ๋ ์ ๋ ฌ์ด ๋์๊ฒ์ด๋ค.
var a = 2;
const b = 3;
let c = '1';
์ด๊ฒ์ ์ข ๋ ํธํ๊ฒ ์ ์ฅํ ๋๋ง๋ค ์๋์ ์ผ๋ก ์ฝ๋์ ๋ ฌ์ด ์ด๋ค์ง๊ฒ ์ค์ ํ ๊ฑฐ๋ค.
VSCODE์ ์ผ์ชฝ ์๋จ File -> Preferences -> Settings (๋จ์ถํค๋ก๋ Ctrl + ,)
์ค๋ฅธ์ชฝ ์ Open Settings (JSON) ํด๋ฆญํ์ฌ "editor.formatOnSave"
๋ฅผ true๋ก ๋ฐ๊ฟ ์ฃผ๋ฉด ๋๋ค.
๋๋ true๋ก ๋์ด์๋ค?? false์ด๊ฑฐ๋ ํด๋น ์ฝ๋๊ฐ ์์ผ์ ๋ถ์ ๋ฃ์ด์ฃผ์๋ฉด ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ด์ ์ ์ฅํ ๋๋ง๋ค ์ฝ๋๋ ์์์ ์ ๋ ฌ์ด ๋๋ค.
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
},
์ ์ด์ ESlint๋ฅผ ๋ณผ๊ฒ์ด๋ค ๋ถ๋ช ๋ด๊ฐ index.js๋ฅผ ์์ฑํ๋ผํ์๋ ์ด๋์ ๋ ๋์น์ฑ์ ๋ถ๋ค๋ ์์๊ฒ์ด๋ค.
์๋์ ๊ฐ์ด ๋นจ๊ฐ์ค๊ณผ ํจ๊ป ๋ฌธ๋ฒ์ฒดํฌ๋ก ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
๊ฐ๋จํ ์ฝ๋์ง๋ง ๊ทธ๋์ ํด์๋ ํ๋ก์ ํธ์ ์ ์ฉ์ ํ๋ฉด ๋ถ๋ช
์ด๊ฒ๋ณด๋ค ํจ์ฌ ๋ง์ ๋ฌธ๋ฒ์ค๋ฅ๊ฐ ๋ํ๋ ๊ฑฐ๋ค.
๊ทธ๋ฌ๋ ๋ชจ๋ ์งํค๋ฉด ์ข๊ฒ ์ง๋ง ์ด๊ฒ ์ฌ์ค ํ๋ฒ์ ๋ฐ๊พธ๊ธฐ๊ฐ ์ฝ์ง์๋ค. ๊ทธ๋์ ๋ณธ์ธ์ด ํ๋จํ์ ์งํค๊ณ ์ถ์ง์๋ ๋ฌธ๋ฒ์ด
์กด์ฌํ๋ฉด ์๋์๊ฐ์ด .eslintrc.json
์ ๋ฃฐ์ ์ค์ ํด์ฃผ๋ฉด ๋๋ค.
๋๋ no-var๋ ์๋ฌ๊ฐ ์๋ ๊ฒฝ๊ณ ํ์๋ก ๋๋จธ์ง no-unused-vars, prefer-const๋ ์์ ์ฒดํฌ ์ํจ์ผ๋ก ๋ฐ๊ฟ๋ณด๊ฒ ๋ค.
{
"extends": ["airbnb-base", "plugin:prettier/recommended"],
"plugins": ["prettier"],
"rules": {
"prettier/prettier": "error",
"no-var": "warn",
"no-unused-vars": "off",
"prefer-const": "off"
}
}
์์ ๊ฐ์ด ๋ฐ๊พธ๊ณ ๋ค์ index.js๋ก ๊ฐ๋ณด์.
๋ด๊ฐ ์ํ๋๋๋ก ๊ฒฝ๊ณ ํ์์ ๊ธฐ์กด์์๋ ์๋ฌ๋ ํ์๋์ง ์๋๋ค.
๊น๋ํ ์ฝ๋์ ๋ ฌ๊ณผ ์ฌ๋ฐ๋ฅธ ๋ฌธ๋ฒ์ฌ์ฉ์ ์ ์ง๋ณด์์์๋ ํธ๋ฆฌํจ๊ณผ ํผํฌ๋จผ์ค์ชฝ์์๋ ์ ๋ฆฌํ๊ฒ
์๋ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค.
๊ผญ ์ฌ์ฉ์ ํ๋ผ๋๊ฑด ์๋์ง๋ง ์ฌ์ฉ์ ๊ถ์ฅํ๋ฉด์ ์ด๋ ๊ฒ ๋ด๊ฐ ์ค๋นํ๋ ํฌ์คํ ์ ๋ง์น๋ ค ํ๋ค.