๋ค์ด๊ฐ๋ฉฐ
์ค๋ฌด์์ ํ๋ฐํธ์๋ ๊ฐ๋ฐ์ ํ๋ค ๋ณด๋ฉด ๋ ํจ์จ๊ณผ ์์ฐ์ฑ์ ๋ํด์ ๊ณ ๋ฏผํ๊ฒ ๋ฉ๋๋ค. ์ด๋ป๊ฒ ํ๋ฉด ํ ์ ์ฒด๊ฐ ์ผ๊ด๋ ํ์์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ ์ ์์์ง, ๋งค๋ฒ ๋ฐ๋ณต์ ์ผ๋ก ์น๋ ์ฝ๋๋ค์ ์ค์ผ ์ ์์์ง ๊ณ ๋ฏผํ์ฃ .
์ค๋์ ์ด๋ฐ ๊ณ ๋ฏผ๋ค์ ํด๊ฒฐํด์ค ์ ์๋ ๋ช ๊ฐ์ง ๋๊ตฌ๋ฅผ ์๊ฐํ๋ ค๊ณ ํฉ๋๋ค. ๋ฐ๋ก ESLint, Prettier, Vue VSCode Snippets ์ ๋๋ค. ๋๊ตฌ๋ค์ ๋ํ ๊ฐ๋จํ ์ค๋ช ๋ถํฐ ํ๋ก์ ํธ์ ๋ฐ๋ก ์ ์ฉํด์ ์ฌ์ฉํ ์ ์๋ ๊ฐ์ด๋๋ฅผ ์งง์ ํธํก์ผ๋ก ์ ์ด๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ผ ์ด ๊ธ์ด ์ฌ๋ฌ๋ถ์ ์ ๋ฌด ์๊ฐ์ ์ค์ฌ์ค ์ ์๊ธธ ๋ฐ๋ผ๋ฉฐ..
Enjoy your coding!
Prettier
ํ๋ฆฌํฐ์ด(Prettier)๋ ์ฝ๋ ์คํ์ผ์ ์ ๋ฆฌํด์ฃผ๋ ๋๊ตฌ์ ๋๋ค. ESLint์ ํจ๊ป ์ฌ์ฉํ๋ฉด ์ข ๋ ๊ฐ์ธ ์ทจํฅ์ ๋ง๋ ์ฝ๋ ์คํ์ผ๋ก ์ ์ฒด ์ฝ๋๋ฅผ ์ ๋ฆฌํ ์ ์์ต๋๋ค. VSCode(Visual Studio Code), Atom, Sublime ๋ฑ ๋์ค์ ์ธ ํ ์คํธ ํธ์ง๊ธฐ์์ ์ด๋ฏธ ํ๋ฌ๊ทธ์ธ ํํ๋ก ์ง์ํ๊ณ ์์ผ๋ฉฐ VSCode์์๋ ์๋์ ๊ฐ์ด ํ์ฅ ํ๋ฌ๊ทธ์ธ์ผ๋ก ์ค์นํ ์ ์์ต๋๋ค.
Prettier ์ ์ฉํ๊ธฐ
ํ๋ฆฌํฐ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ์์์ ์ธ๊ธํ ํ๋ฌ๊ทธ์ธ์ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. VSCode ๊ธฐ์ค์ผ๋ก ์๋์ ๋ด์ฉ์ ์ฌ์ฉ์ ์ค์ ํ์ผ์ธ settings.json ํ์ผ์ ์ถ๊ฐํฉ๋๋ค.
{
"editor.formatOnSave": true,
"editor.formatOnType": true
}
์ ์์ฑ์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ ์ฅ ๋ฒํผ์ ๋๋ ์ ๋ ์๋์ผ๋ก ์ฝ๋๋ฅผ ์ ๋ฆฌํด์ค๋๋ค. ์๋์ ๊ฐ์ด ๋ง์ด์ฃ .
์ด๋ ๊ฒ ํ๋ฌ๊ทธ์ธ์ผ๋ก ๊ฐ๋จํ๊ฒ ์ฝ๋๋ฅผ ์ ๋ฆฌํ ์๋ ์์ง๋ง ๊ฐ์ธ์ ์ผ๋ก๋ ESLint์ ๊ฒฐํฉํ์ฌ ํ๋ก์ ํธ ์ค์ ํ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค. ์๋ํ๋ฉด ํ์๋ค์ด ๋ชจ๋ ๋์ผํ ํ ์คํธ ํธ์ง๊ธฐ๋ฅผ ์ฌ์ฉํ๋ค๋ ๋ณด์ฅ์ด ์์ผ๋๊น์ :)
ESLint์ ํ๋ฆฌํฐ์ด๋ฅผ ํจ๊ป ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ค๋ค์ ์น์ ์ ์ฐธ๊ณ ํ์ธ์.
ESLint ์๊ฐ
๋ฆฐํธ(ESLint)๋ ์๋ชป๋ ์ฝ๋ ์คํ์ผ๋ก ์ธํด ์๋ฌ๊ฐ ๋์ง ์๊ฒ ์ฝ๋ ๋ฌธ๋ฒ์ ์ก์์ฃผ๋ ๋ฌธ๋ฒ ๊ฒ์ฌ๊ธฐ์ ๋๋ค. ๋ฌธ์ฅ ๋ค์ ์๋์ผ๋ก ์ธ๋ฏธ์ฝ๋ก , ์ฝค๋ง๋ฅผ ๋ถ์ฌ์ฃผ๊ธฐ๋ ํ๊ณ ์๋ฏธ ์๋ ๋ณ์, API ์ฌ์ฉ์ ๋ํด ๊ฒฝ๊ณ ํด์ฃผ๋ ๋ฑ ์ฌ๋ฌ ๋ฌธ๋ฒ ์ค๋ฅ์ ๋ํด์ ๋ฏธ๋ฆฌ ์๋ ค์ฃผ์ฃ . ๊ฐ๊ธ์ ๋ ์๋ฌ๊ฐ ๋๋ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ์์ฐ์ค๋ฝ๊ฒ ๋ฒ๊ทธ๋ ์ค์ด๋ค๊ธฐ ๋๋ฌธ์ ์๋น์ค ํ์ง์ ๋์ด๋๋ฐ๋ ๋์์ด ๋ฉ๋๋ค.
ESLint์ Prettier๋ฅผ ๋ทฐ ํ๋ก์ ํธ์ ์ ์ฉํ๊ธฐ
์ผ๋จ Vue CLI 3.x ๋ฒ์ ์์๋ ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๋ ESLint์ Prettier๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์๋์ ๊ฐ์ด ๋ง์ด์ฃ .
ํ์ง๋ง ์ด๋ฏธ ๋ทฐ ํ๋ก์ ํธ๋ฅผ ์์ฑํ์ฌ ์งํ ์ค์ด์ ๋ถ๋ค์ ์๋์ ๊ฐ์ด ๊ตฌ์ฑํ์๋ฉด ๋ฉ๋๋ค.
1.๋ ธ๋ ํจํค์ง ๋งค๋์ (NPM)๋ก ๋ฆฐํธ ๋ฐ ํ๋ฆฌํฐ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํฉ๋๋ค.
npm i eslint eslint-config-prettier eslint-plugin-prettier eslint-plugin-vue --save-dev
2.ํ๋ก์ ํธ ๋ฃจํธ ๋ ๋ฒจ์ ๋ฆฐํธ ์ค์ ํ์ผ์ธ .eslintrc.js
๋ฅผ ์ถ๊ฐํฉ๋๋ค.
// .eslintrc.js
module.exports = {
// ํ์ฌ eslintrc ํ์ผ์ ๊ธฐ์ค์ผ๋ก ESLint ๊ท์น์ ์ ์ฉ
root: true,
// ์ถ๊ฐ์ ์ธ ๊ท์น๋ค์ ์ ์ฉ
extends: [
'eslint:recommended',
'plugin:vue/essential',
'prettier',
'plugin:prettier/recommended',
],
// ์ฝ๋ ์ ๋ฆฌ ํ๋ฌ๊ทธ์ธ ์ถ๊ฐ
plugins: ['prettier'],
// ์ฌ์ฉ์ ํธ์ ๊ท์น ์ถ๊ฐ
rules: {
'prettier/prettier': [
'error',
// ์๋ ๊ท์น๋ค์ ๊ฐ์ธ ์ ํธ์ ๋ฐ๋ผ prettier ๋ฌธ๋ฒ ์ ์ฉ
// https://prettier.io/docs/en/options.html
{
singleQuote: true,
semi: true,
useTabs: true,
tabWidth: 2,
trailingComma: 'all',
printWidth: 80,
bracketSpacing: true,
arrowParens: 'avoid',
},
],
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
},
};
๊ฐ ์ฃผ์ ์์ฑ์ ๋ํด์ ๊ฐ๋ตํ ์์๋ณด๊ฒ ์ต๋๋ค.
root
: ํ์ฌ ํด๋ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์์ ํ์ผ์ ๋ฆฐํธ๋ฅผ ์ ์ฉํฉ๋๋ค. ์์ ํด๋์ ๋ฆฐํธ๋ฅผ ์ ์ฉํ์ง ์์ต๋๋ค.extends
: ๋ฆฐํธ์ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ ๊ฒ์ฌ ๊ท์น ์ด์ธ์ ์ถ๊ฐ์ ์ธ ๊ท์น๋ค์ ์ ์ฉํฉ๋๋ค. ์ด๋ฏธ ๋๊ตฐ๊ฐ์ ์ํด ์ ํด์ง ๋ช ๊ฐ์ ๊ท์น์ ์ถ๊ฐํ๋ค๊ณ ๋ณด๋ฉด ๋ฉ๋๋ค.plugins
: NPM์ผ๋ก ์ค์นํ์ฌ ์ฌ์ฉํ ์ ์๋ ํ์ฅ ๊ท์น์ ๋๋ค. ๋์ค์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฒฐํฉํ์ฌ ๋ฆฐํธ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.rules
: ๋ฆฐํธ๋ฅผ ์คํํ ๋ ์ฌ์ฉ์๊ฐ ์์๋ก ๊ท์น์ ์ถ๊ฐํ์ฌ ๊ฒ์ฌ์์ ์ ์ธ ๋๋ ์ถ๊ฐํ๋ ์์ฑ์ ๋๋ค.
์ฐธ๊ณ ๋ก ๋ฆฐํธ ์ค์ ํ์ผ ๋์ ์ package.json
ํ์ผ์ eslintConfig
์์ฑ์ ์ฌ์ฉํด๋ ๋์ง๋ง ๊ท์น ์ ์ฉ์ ๋ํ ์ฐ์ ์์๋ ๋ฆฐํธ ์ค์ ํ์ผ์ด ๋ ๋๊ธฐ ๋๋ฌธ์ ์ค์ ํ์ผ์ ๋ฐ๋ก ๋ง๋ค์ด์ ์ฌ์ฉํ์๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค.
3. NPM ์ค์ ํ์ผ์ธ package.json
ํ์ผ์ ์๋์ NPM ์ปค์คํ
๋ช
๋ น์ด๋ฅผ ์ถ๊ฐํฉ๋๋ค.
{
"lint": "eslint --ext .js,.vue src"
}
์ฝ์ ์ฐฝ์์ ์ ๋ช
๋ น์ด๋ฅผ ์ํํ๋ฉด src ํด๋ ๋ฐ์ js, vue ํ์ผ์ ๋ํด์ ๋ฆฐํธ ๊ฒ์ฌ๋ฅผ ์ํํฉ๋๋ค. ์์์ ๋ฆฐํธ ์ค์ ์ ํ๋ฆฌํฐ์ด ๋ด์ฉ์ ์ถ๊ฐํ๊ธฐ ๋๋ฌธ์ ๋ฆฐํธ์ ๊ธฐ๋ณธ ๊ท์น๊ณผ ํจ๊ป rules
์ ์ค์ ํ ํ๋ฆฌํฐ์ด ๊ท์น๋ ํจ๊ป ์ ์ฉ๋์ด ๊ฒ์ฌ๋ฉ๋๋ค.
4.๋ง์ง๋ง์ผ๋ก ๋น์ฃผ์ผ ์คํ๋์ค ์ฝ๋์ ํ๋ฆฌํฐ์ด ํ๋ฌ๊ทธ์ธ์ ๋นํ์ฑํํ๊ณ settings.json
ํ์ผ์ ์๋์ ๋ด์ฉ์ ์ถ๊ฐํฉ๋๋ค.
{
...
"editor.formatOnSave": false,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
"eslint.alwaysShowStatus": true,
"eslint.workingDirectories": [
{"mode": "auto"}
],
"eslint.validate": [
"javascript",
"typescript"
],
}
ํ๋ฆฌํฐ์ด ํ๋ฌ๊ทธ์ธ์ ๋นํ์ฑํํ์ง ์์ผ๋ฉด VSCode์ Formatter ๊ธฐ๋ฅ๊ณผ ๋ฆฐํธ ๊ฒ์ฌ ๊ธฐ๋ฅ์ด ๊ฒน์น๊ฒ ๋์ด ์ฝ๋๊ฐ ์ผ๊ด๋๊ฒ ์ ๋ฆฌ๋์ง ์์ต๋๋ค. ๊ผญ ํ๋ฆฌํฐ์ด ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ง ์์์ผ๋ก ์ค์ ํ๊ณ VSCode์ ์ค๋ฅธ์ชฝ ์๋์ ์๋ Formatting์ X๋ก ์ ํํด์ฃผ์ธ์.
Vue VSCode Snippets
๋ง์ง๋ง์ผ๋ก ์ดํด๋ณผ ๋๊ตฌ๋ Vue VSCode Snippets์ด๋ผ๋ VSCode ํ์ฅ ํ๋ฌ๊ทธ์ธ์ ๋๋ค. Vue์ ์ฝ์ดํ ๋ฉค๋ฒ์ด์ ๋ง์ดํฌ๋ก์ํํธ์จ์ด ๊ฐ๋ฐ์์ธ Sarah Drasner๊ฐ ์ ์ํ์์ต๋๋ค. ๊ฐ์ธ์ ์ผ๋ก ์์ฃผ ์ฌ์ฉํ๋ ์ค๋ํซ์ vdata, vimport, vmethods ์ ๋๊ฐ ์์ต๋๋ค. ๊ด์ฌ ์์ผ์ ๋ถ๋ค์ ์๋ ๋งํฌ๋ก ์ ์ํด์ ์ดํด๋ณด์ธ์.
๋ง๋ฌด๋ฆฌ
์๋ฌด๋๋ ์ด๋ฒ ๊ธ์ ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ฑ๊ณผ ๊ด๋ จ๋ ๊ธ์ด๋ค๋ณด๋ ๋ฐ๋ผ์ ์ ์ฉํ์๋๊ฒ ์ฝ์ง ์๊ฒ ์ง๋ง ๊ทธ๋๋ ๊ตฌ์ฑํ์๋๋ฐ ๋์์ด ๋์์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค. ์ ๊ตฌ์ฑํ์ ์ ์ฌ๋ฐ๊ณ ํธํ๊ฒ ์ฝ๋ฉํ์ธ์! :)
๊ธ๋ณด๋ค ๋ ์ฝ๊ฒ ๋ฐฐ์ฐ๋ ์จ๋ผ์ธ ๊ฐ์
์ข ๋ ์น์ ํ๊ณ ์์ธํ ์ค๋ช ์ ์ํ์ ๋ค๋ฉด ์๋ ๊ฐ์ข๋ฅผ ์ด์ฉํด๋ณด์๋ ๊ฒ๋ ์ข์ ๊ฒ ๊ฐ์์ ๐
