๐ข ๋ค์ด๊ฐ๋ฉฐ
์ด๋ฒ ํฌ์คํ
์์ "Vue CLI"๋ก ์ค์นํ ํ๋ก์ ํธ์ ESLint์ Prettier๋ฅผ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ค๋ฃฌ๋ค.
๋ง์ง ์ง๋ ํ ์ด ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ๊ฒช์๋ ์ฝ์ง์ ์ ๋ฆฌํ๊ณ ์ ๊ธ์ ์์ฑํด๋ณธ๋ค.
๐ ESLint๋?
ECMAScript/JavaScript ์ฝ๋ ๋ฒ๊ทธ๋ฅผ ์๋ณ/ํํผํ๊ธฐ ์ํ ๋๊ตฌ.
๋ฒ๊ทธ๋ฅผ ์ก์๊ณผ ๋์์ ํฌ๋งท ๊ธฐ๋ฅ๋ ์ง์ํ๊ณ ์๋ค.
์ฝ๋ ํ์ง ์๋ฌ๋ฅผ ์ก๋ ๋ฐ ๋์์ ์ค๋ค.
(ex. no-unused-vars
, no-extra-bind
, no-implicit-globals
, prefer-promise-reject-errors
...)
Vue-cli v3 ์ด์์์๋ ์๋์ผ๋ก eslint ๊ฐ ์ถ๊ฐ๋๋ค.
๋๋ vue create
์์ ESLint ์ต์
์ ํ์ผ๋ก ์๋์ผ๋ก ์ค์น๊ฐ ๊ฐ๋ฅํ๋ค.
์ค์น๊ฐ ๋ ํ๋ก์ ํธ์ package.json
์ ์๋์ ๊ฐ์ ESLint ๊ด๋ จ ์ฝ๋๊ฐ ์ถ๊ฐ๋์ด ์์ ๊ฒ์ด๋ค.
"scripts": {
"lint": "vue-cli-service lint"
},
"devDependencies": {
"@vue/cli-plugin-eslint": "~4.5.0",
"eslint-plugin-vue": "^6.2.2",
"eslint": "^6.7.2",
"babel-eslint": "^10.1.0",
}
"eslintConfig": {
"root": true,
"env": {
"node": true
},
"extends": [
"plugin:vue/essential",
"eslint:recommended"
],
"parserOptions": {
"parser": "babel-eslint"
},
"rules": {}
},
- vue-cli-service lint
- npm run lint ๋ช ๋ น ์ ์คํ๋๋ ๋์์ด๋ค.
- ์คํ ์, ESLint ๋ฒ๊ทธ ์บ์น + ํฌ๋งทํ ์ด ์งํ๋๋ค.
- @vue/cli-plugin-eslint
- Vue CLI ์ฉ ESLint ํ๋ฌ๊ทธ์ธ.
- eslint-plugin-vue
- Vue.js์ฉ ๊ณต์ ESLint ํ๋ฌ๊ทธ์ธ.
- eslint
- ESLint
eslintConfig
๋ ESLint ์ค์ ํ์ผ์ด๋ค.eslintConfig
๋ ์ง๊ธ์ฒ๋ผ package.json
์ ์กด์ฌํ ์๋ ์๊ณ , .eslintrc
ํ์ผ๋ก ๋ฐ๋ก ๋นผ์ ๊ด๋ฆฌํด ์ค์๋ ์๋ค..eslintrc
ํ์ผ์ .json
ํ์ผ์ด์ด๋ ๋๊ณ , .js
ํ์ผ์ด์ด๋ ์๊ด ์๋ค.
eslintConfig ์ค์ ์ ํ๋์ฉ ์ดํด๋ณด์.
๐ ESLint Config
๐ root
ESLint ๋ ์์์๋ ์ค๋ช
ํ๋ค์ํผ, ์ค์ ํ์ผ์ ๋ฐ๋ก ๋ ์ ์๋๋ฐ,
์ด๋ ํ๋์ ์ฝ๋ ์ ์ฅ์์์ ์ฌ๋ฌ ํ๋ก์ ํธ๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ, ์ฌ๋ฌ ๊ฐ์ผ ์ ์๋ค.
ELint ๋ ํ์ฌ ํด๋ ์์ ์ค์ ํ์ผ์ด ์๋์ง ์ฐ์ ์ ์ผ๋ก ํ์ธํด๋ณด๊ณ ์์ผ๋ฉด
๊ทธ ์์ ํด๋๋ฅผ ํ ๋จ๊ณ์ฉ ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ๋ฉด์ ์ค์ ํ์ผ์ ์ฐพ๋๋ค.
์ด ๋, root
์ต์
์ด true
๋ก ์ค์ ๋์ด ์๋ ํ์ผ์ ๋ง๋๋ฉด ๋ ์ด์ ์์ ํด๋๋ก ์ฌ๋ผ๊ฐ์ง ์๋๋ค.
์ฆ, ๋ด ์ฝ๋์์ package.json
์ ์ ์๊ฐ ๋์ด์์ผ๋
์ด package.json
์์์ ํด๋๋ค์ ๊ฒ์ฌํ์ง ์๋ ๊ฒ์ด๋ค.
๐ env
๋ค์ํ ํ๊ฒฝ๋ง๋ค ์ ์ญ(global) ๋ณ์๋ฅผ ํตํด ์ ๊ทผ ๊ฐ๋ฅํ ๊ณ ์ ๊ฐ์ฒด๊ฐ ์๋ค.
๋ํ์ ์ธ ์๋ก, windows
๊ฐ์ฒด๊ฐ ์๋ค.
์ด windows
๊ฐ์ฒด๋ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์ ์ ์ญ ์ ๊ทผ์ด ๊ฐ๋ฅํ์ง๋ง NodeJS์์ ๋ถ๊ฐ๋ฅํ๋ค.
ESLint ๋ ์ด๋ฐ ์ ์ธํด์ฃผ์ง ์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์กด์ฌํ๋ ๊ฐ์ฒด๋ค์ ๋ํด ์ค๋ฅ๋ฅผ ๋ด๊ธฐ ๋๋ฌธ์,
์ด๋ค ๋ณ์๊ฐ ์กด์ฌํ๋ ํ๊ฒฝ์ธ์ง๋ฅผ ์ธ์ง์์ผ์ค์ผํ๋ค.
์ด ์ญํ ์ env
๊ฐ ํ๊ณ ์๋ค.
์์ ๊ฐ์ด node
๋ฅผ true
๋ก ์ค์ ํด ์ค๋ค๋ฉด,
NodeJS์์ ์คํ๊ฐ๋ฅํ ์ ์ญ ๊ฐ์ฒด์ ๋ํ ๋์์ ํ ์ ์๊ฒ ๋๋ค.
"env": {
"node": true
},
๐ extends
์ ๋ช
๊ธฐ์
์ด๋ ESLint ๊ณต์์์ ESLint ์ค์ ์ ๊ณต์ ํ๊ณ ์๋ค.
์ด๋ฅผ extends
์ ์จ์ฃผ๋ฉด ๊ทธ๋ค์ ESLint ์ค์ ์ ๊ทธ๋๋ก ํ์ฉํ ์ ์๋ค.
ํ์ฉํ๊ณ ์ ํ๋ ESLint ํ๋ฌ๊ทธ์ธ ๋ฐ Prettier ํ๋ฌ๊ทธ์ธ์ ์ด ๊ณณ์ ์จ์ฃผ๋ฉด ๋๋ค.
"extends": ["airbnb"]
์๋ฅผ ๋ค์ด ,์์ด๋น์ค๋น์์ ๊ณต์ ํ ESLint ์ค์ ์ ์ฐ๊ณ ์ถ๋ค๋ฉด,eslint-config-airbnb
npm ํจํค์ง๋ฅผ ๋ค์ด ๋ฐ์ ํ ์์ ๊ฐ์ด ์ค์ ํด์ฃผ๋ฉด ๋๋ค.
ํ์ฅ ๊ฐ๋ฅํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์์ ๊ฐ์ด eslint-config-
๋ผ๋ ์ ๋์ด๊ฐ ๋ถ๋๋ฐ, ์ด๋ extends
์์ ์๋ต ๊ฐ๋ฅํ๋ค.
์ ํํ๋, eslint-config-
๊ฐ ๋ถ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(์ดํ 'config ๋ผ์ด๋ธ๋ฌ๋ฆฌ')๋
config ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ท์น๊ณผ ์ถฉ๋ํ๋ ESLint ๊ท์น์ OFF ํด์ฃผ๋ ์ญํ ์ ํ๋ค.
"extends": [
"plugin:vue/essential",
"eslint:recommended"
],
๋ด ์ฝ๋์์ ์์ ๊ฐ์ด ์์ฑ๋์ด ์์๋ค.plugin:vue/essential
๋ Vue ๊ณต์์์ ์ ๊ณตํ๋ ESLint ํ๋ฌ๊ทธ์ธ์ผ๋ก,
์๋ฌ๋ฅผ ๋ด๋ ์ฝ๋์, ์์์น ๋ชปํ ๊ฒฐ๊ณผ๋ฅผ ๋ณ๋ ์ฝ๋๋ฅผ ์์ธกํ๋ค.eslint:recommended
๋ ESLint ๊ณต์์์ ์ถ์ฒํ๋ ํฌ๋งท ์ค์ ์ด๋ค.
์ด๋ฐ์์ผ๋ก ๋จ์(?) ์ค์ ์ ๊ฐ์ ธ์์ ์ธํ (ํ์ฅ)ํด์ค ์ ์๋ค.
๐ parserOptions
๊ฐ๋ฐ์๊ฐ ์์ฑํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ ์ค์ ๋ก ๋ธ๋ผ์ฐ์ ์ ๊ฐ์ ์คํํ๊ฒฝ์์ ์ค์ ๋ก ๋์๊ฐ๋ ์ฝ๋์ ๋ค๋ฅธ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
์๋ฅผ ๋ค์ด, ํ์
์คํฌ๋ฆฝํธ๋ JSX ์ ๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ฅ๋ฌธ๋ฒ์ผ๋ก ๊ฐ๋ฐํ๊ฑฐ๋
Babel ๊ณผ ๊ฐ์ ํธ๋์คํ์ผ๋ฌ๋ฅผ ํตํด ์ต์ ๋ฌธ๋ฒ์ผ๋ก ๊ฐ๋ฐํ๋ ๊ฒฝ์ฐ๋ฅผ ๋ค ์ ์๋ค.
๐ก Babel
ES6 ์ด์์ ์ต์ ๋ฌธ๋ฒ์ผ๋ก ์์ฑํ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ES5 ์ดํ์ ๋ฌธ๋ฒ์ผ๋ก ์์ฑํ ๊ฒ์ฒ๋ผ ์ฝ๋๋ฅผ ์ปดํ์ผ/ํธ๋์คํ์ผ ํด์ฃผ๋ ๋๊ตฌ.
์ต์ ๋ฌธ๋ฒ์ด ์ ์ฉ๋์ง ์๋ ์คํํ๊ฒฝ์์๋ ์ต์ ๋ฌธ๋ฒ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋ฌธ์ ์์ด ์๋ํ๋๋ก ๋์์ค๋ค.
ESLint ๋ ์์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ง ์ดํดํ ์ ์๊ธฐ ๋๋ฌธ์
์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ฅ ๋ฌธ๋ฒ์ด๋ ์ต์ ๋ฌธ๋ฒ์ผ๋ก ์์ฑํ ์ฝ๋๋ฅผ ๋ฆฐํธํ๊ธฐ ์ํด์ ๊ทธ์ ์์ํ๋ ํ์(parser)๋ฅผ ์ค์ ํด์ค์ผํ๋ค.
"parserOptions": {
"parser": "babel-eslint"
},
์ ์ฝ๋๋ฅผ ๋ณด๋ฉด babel-eslint
๋ผ๋ eslint ์ฉ ๋ฐ๋ฒจ์ด ์ค์ ๋์ด ์๋ค.babel-eslint
๋ vue cli ๋ก๋ถํฐ ์๋์ผ๋ก ์ค์น๊ฐ ๋์ด ์๋ ํ๋ฌ๊ทธ์ธ์ด๋ค.
๐ rules
ESLint ๊ท์น์ ๋ํ
์ผํ๊ฒ ์ ์ดํ ๋ ์ฌ์ฉํ๋ ์ต์
์ด๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋น์์ ธ์๋ค.
extends
์ต์
์ ํตํด ์ค์ ๋ ๊ท์น์ ๋ฎ์ด์ฐ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ฉด ๋๋ค.
์๋ฅผ ๋ค๋ฉด...
Airbnb ๊ธฐ๋ฐ ์ค์ ์๋ no-console
๊ท์น์ ์ด๊ธฐ๋ฉด ๊ฒฝ๊ณ (warn
)๋ฅผ ๋ด๋๋ฐ,
๊ฒฝ๊ณ ๊ฐ ์๋ ์ค๋ฅ(error
)๊ฐ ๋ฐ์ํ๋๋ก ์ค์ ํด์ค ์ ์๋ค.
{
"extends": ["airbnb"],
"rules": {
"no-console": "error"
}
}
๐ Prettier๋?
๊ณต๋ฐฑ ๋ฐ ํญ ๊ฐ๊ฒฉ, ํค์๋ ๊ฐ๊ฒฉ, ์ผํ ์คํ์ผ ๋ฑ ์ฝ๋ ํ์์ ๋ํ ํฌ๋งทํ
์ ์ง์ํด์ฃผ๋ ๋๊ตฌ์ด๋ค.
์ฝ๋ ์คํ์ผ์ ์ค์ ํด๋์ผ๋ฉด ์๋์ผ๋ก ์ฝ๋ ์์ ์ด ๊ฐ๋ฅํ๋ค.
Prettier ๋ฅผ ํ์ฉํ๋ฉด ์ฝ๋ฉ ์ปจ๋ฒค์
์ ์ฝ๊ฒ ์ง์ ํ ์ ์๋ค.
๐ก ์ฝ๋ฉ ์ปจ๋ฒค์
์ฝ๊ณ , ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ฝ๋ฉ ์คํ์ผ ๊ท์ฝ
๐ ESLint vs Prettier
Prettier | ESLint | |
---|---|---|
์ฉ๋ | ์์ ๋ฐ ์คํ์ผ ์ง์ ์ฉ | ์ฝ๋ ๋ฒ๊ทธ ์ก๊ธฐ์ฉ |
์คํ ๋ฐฉ๋ฒ | prettier --write | eslint --fix |
๐ Prettier ์ ์ฉ
Prettier ๋ฅผ ์ ์ฉํด์ฃผ๊ธฐ ์ํด ์ค์น๋ถํฐ ํด์ฃผ์.
--dev ๋ devDependencies(๊ฐ๋ฐ์ฉ ์์กด์ฑ. ๋ฐฐํฌ ๋ ํฌํจ๋์ง ์์) ์ ์ถ๊ฐํ๋ค๋ ์ต์ ์ด๋ค.
$ npm i prettier --dev
Prettier ๋ฅผ ์ค์น ํ๋ค๋ฉด, ์ด์ ์ด๋ค ์คํ์ผ์ ์ธ ๊ฒ์ธ์ง ์ค์ ํด์ค์ผํ๋ค.
์ผ๋จ์ prettier ๊ณต์ ์ค์ (@vue/eslint-config-prettier)์ผ๋ก ์ค์นํด์ค๊ฒ์ด๋ค.
vue cli ๋ก ์ค์นํ ํ๋ก์ ํธ๋ ๋ณ๋์ eslint-config-prettier ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ณด๋จ,
@vue/eslint-config-prettier์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
vue cli ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ ๋ค๋ฅธ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋ณ๋์ ์ค์ ์ด ํ์ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
(๋๋ ์ฒ์์ vue cli ํ๋ก์ ํธ ์ฉ์ด ์๋ eslint-config-prettier
๋ฅผ ์ฌ์ฉํ์๋๋ฐ, ์์ฃผ ๋๋ฆฌ๊ฐ ๋ฌ์๋ค.)
์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ง๊ณ ๋ vue cli ๋ก ์ค์นํ ํ๋ก์ ํธ๋ vue cli ์ฉ ํ๋ฌ๊ทธ์ธ์ด ๋ฐ๋ก ์กด์ฌํ ์ ์์ผ๋,
ํญ์ @vue/
๊ฐ ์ ๋์ด๋ก ๋ถ์ ํ๋ฌ๊ทธ์ธ์ด ๋ณ๋๋ก ์กด์ฌํ๋์ง ํ์ธํ๋ฉด ์ข๋ค.
$ npm i --dev @vue/eslint-config-prettier
์ค์นํ ์คํ์ผ์ extends
๋ถ๋ถ์ ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ค.
"extends": [
"plugin:vue/essential",
"eslint:recommended",
"@vue/eslint-config-prettier" // ์ถ๊ฐ!
],
๐ .prettierrc
์ค์ ํ ์คํ์ผ์ ๊ฐ์ธ์ ์ธ ์ค์ ์ ๋ฎ์ด์์ฐ๊ณ ์ถ๋ค๋ฉด
๋ฃจํธ ๋๋ ํ ๋ฆฌ์ .prettierrc
ํ์ผ์ ํ๊ณ ์ค์ ํด์ฃผ๋ฉด ๋๋ค.
๋๋ ์๋์ ๊ฐ์ด ์ค์ ํด์คฌ๋ค.
{
"singleQuote": true,
"semi": true,
"tabWidth": 4,
"printWidth": 100,
"singleAttributePerLine": true
}
- singleQuote
- ์๋ฐ์ดํ๊ฐ ์๋ ์์ ๋ฐ์ดํ๋ฅผ ์ฌ์ฉํ๋ค.
- semi
- ์ฝ๋ ๋์ ํญ์ ์ธ๋ฏธ์ฝ๋ก ์ ๋ถ์ธ๋ค.
- tabWidth
- ํญ๊ฐ๊ฒฉ. ๋๋ 4์นธ์ผ๋ก ํ๋ค.
- printWidth
- ์ค ๋ฐ๊ฟํ ์ต๋ ์ค ๊ธธ์ด
- singleAttributePerLine
- html ์์ฑ์ ์ด์ด ์ฐ์ง ์๊ณ ๊ฐ๊ฐ ํ ์ค๋ง๋ค ์์ฑํ๋ค.
๋๋ ํ ์ฝ๋ ์ํฅ์ผ๋ก ์ด ์ค์ ์ด ์ต์ํด์ ํ์ผ์ ๋ฐ๋ก ํ์คฌ๋ค.
์ด ์ต์
์ธ์๋ ๋ค๋ฅธ ์ต์
๋ ์ง์ ๊ฐ๋ฅํ๋ค. (์์ธํ)
๐จ Prettier ์ ์ฉ ์ค ์๋ฌ๊ฐ ๋๋ค๋ฉด?
์ค์น ํ๊ณ ๋๋ ์๋์ ๊ฐ์ ์๋ฌ๊ฐ ๋ด๋ค.
Error: Failed to load plugin 'prettier' declared in 'package.json » @vue/eslint-config-prettier': Cannot find module 'eslint-plugin-prettier'
ํด์ํด๋ณด๋, eslint-plugin-prettier
๋ผ๋ ๋ชจ๋์ด ์๋ค๊ณ ํ๋ค.
๋น์ฐํ๋ค. ์ ๊น์์คฌ๋ค.
๐ก eslint-plugin-prettier
ESLint ๋ ์ฝ๋ ๋ฒ๊ทธ๋ฅผ ์ก์๊ณผ ๋์์ ํฌ๋งทํฐ ์ญํ ๋ ํด ์ค ์ ์๊ธฐ ๋๋ฌธ์,
์ฝ๋ ์คํ์ผ ํฌ๋งทํฐ์ธ Prettier ์ ์ถฉ๋ํ ์๋ ์๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์ ์ถ๊ฐํ๋ ๊ฒ์ด eslint-plugin-prettier ์ด๋ค.
Prettier ๊ท์น๋ค์ ESLint ๊ท์น์ ์ถ๊ฐํ๋ ํจํค์ง์ด๋ค.
eslint --fix ๋ง ์คํํด์ค๋ prettier --write๋ฅผ ์ฌ์ฉํ ํ์ ์์ด Prettier ๊น์ง ์ ์ฉ์์ผ์ค๋ค.
ํด๊ฒฐ๋ฒ์ ์์๋ณด๊ธฐ์ ์์,
์ด ์๋ฌ๊ฐ ์๋ ๋ค๋ฅธ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ํ๊ฒฝ์ด ์์ ๊ฒ์ด๋ค.
(๋ ๊ฐ์ ๊ฒฝ์ฐ 'Failed to load plugin 'prettier' declared in 'package.json'...' ์๋ฌ๊ฐ ๋ฐ์ํ๊ธฐ๋ ํ๋ค.)
์๋์์ ์ค๋ช
ํ ๋ฐฉ๋ฒ์ผ๋ก ๋ค๋ฅธ ์๋ฌ๋ ๋์ ํ๋ฅ ๋ก ํด๊ฒฐ ๊ฐ๋ฅํ๋ค๐
์ฐจ๊ทผ์ฐจ๊ทผ ์ฝ์งํ ๋ด์ฉ์ ์ ๋ฆฌํด๋ณด์.
๋จผ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น ํ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๋ํ์ ์ธ ์์ธ์ ๋๊ฐ์ง์ด๋ค.
- ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฒ์ ํธํ์ด ๋์ง ์์์
- ํ์ํ(์์กดํด์ผํ๋) ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์กด์ฌํ์ง ์์์.
์ด๋ด ๋ ํ์ฉํ ์ ์๋ ๊ฒ์ด npm info
๋ช
๋ น์ด์ด๋ค.npm info
๋ ๋ง ๊ทธ๋๋ก ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ ์๋ ๋ช
๋ น์ด์ด๋ค.
์ค์นํ๊ณ ์ ํ๋ @vue/eslint-config-prettier
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์ ๋ณด๋ฅผ info
๋ช
๋ น์ด๋ก ์์๋ณด์.
๋ง์ ์ ๋ณด๊ฐ ๋์จ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
์ฌ๊ธฐ์ ์์์ผํ ์ ๋ณด๋ dependencies
์ latest
๋ฒ์ ์ด๋ค.
์์์ ์ธ๊ธํ๋ ๋ฒ์ ํธํ ๋ฌธ์ ์ ์์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ถ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ค ํค์๋๋ค์ด๋ค.
๋ค๋ฅธ ์ ๋ณด๋ค์ ๋ฑํ ํ์ ์์ด์, ์ต์ ์ ์ ํด์ค ์๋ ์๋ค.
ํ์ํ ์์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ธ
$ npm info [๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ช
] peerDependecies
์ญ๋ ๋ฆด๋ฆฌ์ฆ ๋ฒ์ ํ์ธ
$ npm info [๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ช
] versions
@vue/eslint-config-prettier
์ ์์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฒ์ํ์,eslint
7.28.0 ๋ฒ์ ์ด์๊ณผ, prettier
2.0.0 ์ด์์ด ํ์ํ๋ค๊ณ ๋์๋ค.
package.json
์ ํ์ธํด๋ณด๋,
"eslint": "^6.7.2",
"prettier": "^2.7.1",
prettier
์ ๋ฒ์ ์ ์ถฉ์กฑํ์ง๋ง, eslint
์ ๋ฒ์ ์ด ํ์ฐธ ๋ฎ์ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
์ด๋ด ๋, ๊ธฐ์กด์ eslint
๋ฅผ ๋ฒ์ ์
ํด์ค๋ ๋๊ธด ํ์ง๋ง,
vue cli๋ก ์ธํด ์๋ ์ค์น๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ฌ์ ๋ค๋ฅธ ์์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฒ์ ๋ํ ์์ ํด์ผํ ๊ฐ๋ฅ์ฑ์ด ๋๊ธฐ ๋๋ฌธ์,
์ค์นํ๊ณ ์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฒ์ ์ ์ต์ ์ด ์๋ ํ์ฌ ํ๊ฒฝ์ ๋ง์ถฐ์ ๋ฎ์ ๋ฒ์ ์ ์ค์นํด์ฃผ๋ฉด ๋๋ค.
ํ์ง๋ง ์ผ๋ง๋ ๋ฎ์ ๋ฒ์ ์ ์ค์นํด์ค์ผํ ์ง ๋ชจ๋ฅด๊ฒ ์ ๋!versions
์ต์
์ ์ฌ์ฉํด์ฃผ๋ฉด ๋๋ค.
ํ์ธํด๋ณด๋, ์ต์ ๋ฒ์ ์ด์ ๋ฒ์ ์ด 6.0.0 ์ธ ๊ฒ์ผ๋ก ๋์๋ค.
6.0.0์ ๋ํ ์์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค์ ๊ฒ์ํด๋ณด์๋ค.
eslint
๊ฐ 5.0.0 ๋ฒ์ ์ด์์ด์ด์ผํ๊ณ ,eslint-plugin-prettier
์ ๋ฒ์ ์ด 3.1.0,prettier
๋ 1.13.0 ๋ฒ์ ์ด์์ด์ด์ผํ๋ค.
์๊น ์๋ฌ์ ์์ธ์ด์๋ eslint-plugin-prettier
๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์กด์ฌ๋ฅผ ๋๋ฌ๋๋ค.eslint
์ prettier
๋ ๋ชจ๋ ๋ด ํ๊ฒฝ์ ์ ํฉํ ๋ฒ์ ์ด๋ค.
์ฆ, ๋๋ @vue/eslint-config-prettier
๋ฅผ 6.0.0 ๋ฒ์ ์ผ๋ก ์ค์นํด์ผํ๊ณ ,eslint-plugin-prettier@^3.1.0
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐ๋ก ์ค์นํด์ผํ๋ค.
npm i @vue/eslint-config-prettier@6.0.0 eslint-plugin-prettier@^3.1.0 --dev
์๋ฒ๋ฅผ ๋๋ฆฌ์ ์์กด์ฑ๋ผ๋ฆฌ์ ์ถฉ๋์์ด ์๋ฌด ์๋ฌ๊ฐ ๋์ง ์๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค! ๐
๐ JetBrains Tools ์์ Prettier ๋ฅผ ์ ์ฉํ๋ ๋ฐฉ๋ฒ
์ค์นํ Prettier๋ ์ฝ๋๋ฅผ ๋ณด๋ฉด ํ์ธํ ์ ์๋ค.
์ฝ๋๋ฅผ ํ์ธํ์, Prettier ๊ฐ ๋ด ์ฝ๋๊ฐ ๊ฐํ์ด์๋ค๊ณ ์ด์ฌํ ์ค๋ช ํ๊ณ ์๋ค.
Intellij๋ Webstorm ๊ฐ์ JetBrains ํด์์๋ ์ด๋ฅผ Ctrl
+ Shift
+ Alt
+ P
๋จ์ถํค๋ก ํ๋ฒ์ ์์ ํด์ค ์ ์๋ค.
์ฝ๋งจ๋ ๋ผ์ธ ๋ช
๋ น์ด๋ก๋ Vue CLI์ npm run lint
๋ฅผ ์คํ์์ผ์ฃผ๋ฉด ๋๋ค.
(์ด ๋ช
๋ น์ด๋ ์ ํํ๋ eslint --fix
์ prettier --write
๋ฅผ ํจ๊ป ๊ตฌ๋์ํจ๋ค.)
ํ์ง๋ง ๋งค๋ฒ ๋ช ๋ น์ด๋ฅผ ์คํ์์ผ์ฃผ๊ธฐ์ ๊ท์ฐฎ์ผ๋, ํด์์ ์๋ ํฌ๋งท์ด ๋๋๋ก ์ค์ ํด์ค ์ ์๋ค.
๋จผ์ , Settings(ctrl
+ alt
+ s
) - Plugins ์์ Prettier ํ๋ฌ๊ทธ์ธ์ ๋ค์ดํด์ค๋ค.
Settings - Languages & Frameworks - JavaScript - Prettier ์์
Prettier package ๋ฅผ npm install ํด์ค Prettier ๊ฒฝ๋ก๋ก ์ค์ ํด์ค๋ค.
๋ฆฌํฌ๋งท/์ ์ฅํ ๋๋ง๋ค ์๋์ผ๋ก Prettier ๊ฐ ์คํ๋์์ผ๋ฉด ํด์,
"On 'Reformat Code' action" ๊ณผ "On save" ์ฒดํฌ๋ฐ์ค์ ๋ชจ๋ ์ฒดํฌํ๋ค.
Settings - Tools - Actions on Save ์์
์ ์ฅํ ๋๋ง๋ค ์ํํ๊ณ ์ถ์ ๋์์ ์ค์ ํด์ค ์ ์๋ค.
๋๋ ์๋ ๋ด์ฉ์ ์ฒดํฌํด์ฃผ์๋ค.
- Reformat code
- ์ฝ๋๋ฅผ ํฌ๋งทํ ์ํจ๋ค.
- Rearrange code
- ์ฝ๋๋ฅผ ์ฌ์ ๋ ฌ ์ํจ๋ค.
- Run code cleanup
- ์ฝ๋ ์คํ์ผ ์๋ฐ์ ์ฆ์ ์ ๊ฑฐ
- Run eslint --fix
- ESLint ์คํ ๋ฐ ํฌ๋งทํ
- Run Prettier
- Prettier ์คํ ๋ฐ ํฌ๋งทํ
์ด๋ ๊ฒ ์ค์ ํด๋๋ฉด ์ ์ฅํ ๋๋ง๋ค ESLint/Prettier ๋ฆฌํฌ๋งท์ด ๋ ๊ฒ์ด๋ค. ๐
์ด๋ฒ ํฌ์คํ ์์ Vue CLI ํ๋ก์ ํธ์ ESLint/Prettier ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์๋ค!
๋๊ธ/ํํธ/ํผ๋๋ฐฑ์ ์ธ์ ๋ ํ์์ ๋๋ค๐ฅฐ
์ฐธ์กฐ