๋ค์ด๊ฐ๋ฉฐ
์ด๋ฒ์ ์ ๊ท ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ์ค๋๋ง์ ESLint ๊ท์น์ ์ง๋ํ๋ ๋ค์ฌ๋ค๋ณผ ๊ธฐํ๊ฐ ์๊ฒผ์ต๋๋ค. ์ต๊ทผ์ ๊ฐ์ธ์ ์ผ๋ก Nuxt ํ๋ก์ ํธ๋ฅผ ์์ํ๊ฒ ๋์๋๋ฐ Nuxt์์ ์ ๊ณตํ๋ ESLint ๊ท์น์ด ๊ฝค ๋ง์ ๋ค์ด ์ ํฌ ํ๋ก์ ํธ์๋ ์ ์ฉํด๋ณด๊ณ ์ถ์์ต๋๋ค.
๊ธฐ์กด Vue CLI ํ๋ก์ ํธ์์๋ ๋ทฐ ๊ณต์ ์คํ์ผ ๊ฐ์ด๋์ ๊ถ์ฅ ๋ ๋ฒจ Essentials๋ง ESLint๋ก ํด๋จ์๋๋ฐ, ํ๋ก์ ํธ์ ์ ๊ท ์ธ๋ ฅ์ด ๋ค์ด์ค๋ฉด์ ์ข ๋ ์๊ฒฉํ ์ฝ๋ฉ ์ปจ๋ฒค์ ์ด ํ์ํ์ฃ .
๊ทธ๋์ ์ค๋์ ๋ทฐ CLI๋ก ์์ฑํ ํ๋ก์ ํธ์ ๋๋ง์ ESLint ๋ฃฐ์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ๊ณผ ๊ทธ ๊ท์น์ NPM์ผ๋ก ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๊ณต์ ํ๋ ค๊ณ ํฉ๋๋ค.
๋ ์ผ๊ด๋ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ถ์ผ์ ๋ถ๊ป ๋์์ด ๋๊ธธ ๋ฐ๋ผ๋ฉฐ..! ๐
Captain Pangyo
โป ์ฐธ๊ณ : ์ด ๊ธ์ NPM๊ณผ Git์ ๋ํ ๊ธฐ๋ณธ ์ง์์ด ์์ด์ผ ์ดํดํ๊ธฐ๊ฐ ๋ ์์ํฉ๋๋ค
NPM์ด๋?
NPM(Node Package Manager)์ ํ๋ ํ๋ฐํธ์๋ ๊ฐ๋ฐ ๋น๋ ์์คํ ์์ ๋นผ๋์ ์ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ฆฌ ๋๊ตฌ์ ๋๋ค. ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํธํ๊ฒ ๊ด๋ฆฌํ ์ ์๊ณ ๋ช ๋ น์ด๋ก ์ค์น, ์ ๊ฑฐํ ์ ์์ฃ . ํน์ NPM์ ์์ธํ ๋ชจ๋ฅด์ ๋ค๋ฉด ์นํฉ ํธ๋๋ถ - NPM์ ์ฐธ๊ณ ํ์ธ์.
NPM์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์นํ๊ธฐ
NPM์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(๋ ธ๋ ํจํค์ง)๋ฅผ ๋ค์ด๋ก๋ ๋ฐ์ผ๋ ค๋ฉด ์๋์ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ผ ํฉ๋๋ค.
$ npm i vue
์ด๋ ๊ฒ ํ๋ฉด ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ ์์น์ node_modules
ํด๋๊ฐ ์๊ธฐ๋ฉด์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค์น๋์ฃ .
์ด ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ NPM์ ๊ณต๊ฐ ์ ์ฅ์์ ์์๋ ํ์ผ์
๋๋ค.
์ค์น ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๊ธฐ ๋๋ฌธ์ ์ง์ ํด๋น URL๋ก ์ด๋ํด์ ๋ค์ด๋ก๋ ๋ฒํผ์ ํด๋ฆญํ์ง ์๊ณ ๋ ๋ค์ด๋ก๋ ๋ฐ์ ์ ์๋ ๊ฒ์ด์ฃ .
NPM ๋ฐฐํฌํ๊ธฐ
๊ทธ๋ผ ๋ณธ๋ก ์ผ๋ก ๋ค์ด๊ฐ์ ๋ด๊ฐ ๋ง๋ ํ์ผ์ ์ด๋ป๊ฒ NPM์ ์ฌ๋ฆด ์ ์์๊น์? ๋ฐ๋ก npm publish
๋ผ๋ ๋ช
๋ น์ด๋ฅผ ์ด์ฉํ๋ฉด ๋ฉ๋๋ค.
๋ฌผ๋ก ์๋ฌด๊ฒ๋ ์๋ ์ํ์์ ์ ๋ช
๋ น์ด๋ฅผ ์น๋ฉด ์๋ฏธ๊ฐ ์๊ฒ ์ฃ . ์ ๊ทธ๋ผ ๋๋ง์ NPM ๋ชจ๋ ๋ฐฐํฌ ๋ฐฉ๋ฒ์ ํ๋์ฉ ์ฐจ๋ก๋ก ์ดํด๋ด
์๋ค.
1.NPM ์ฌ์ดํธ์ ํ์๊ฐ์
2.๊นํ์์ ๋ฆฌํฌ์งํ ๋ฆฌ ์์ฑ
3.์๋ก ์์ฑํ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ก์ปฌ์ ํด๋ก
$ git clone <ํด๋ก ํ ๋ฆฌํฌ์งํ ๋ฆฌ ์ฃผ์>
4.ํด๋ก ํ ๋ฆฌํฌ์งํ ๋ฆฌ ํด๋ ์์น๋ก ๊ฐ์ ์๋ ๋ช
๋ น์ด๋ฅผ ์คํํ์ฌ package.json
ํ์ผ ์์ฑ
$ npm init -y
5.๋ฃจํธ ๋๋ ํ ๋ฆฌ์ index.js
ํ์ผ์ ๋ง๋ค๊ณ ๋ฐฐํฌํ ๋ด์ฉ์ ์ถ๊ฐ
// ESLint ๊ท์น ์ถ๊ฐ๋ฅผ ์ํ ์ค์
module.exports = {
rules: {
'no-console': 'off'
}
}
์ฌ๊ธฐ์๋ ์ผ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋๋ผ NPM์ผ๋ก ์ฝ๊ฒ ์ค์นํด์ ์ธ ์ ์๋ ESLint ๊ท์น ํ์ผ์ ๋ค๋ฃน๋๋ค.
6.NPM ๋ฐฐํฌ๋ฅผ ์ํด ๋ช ๋ น์ด ์ ๋ ฅ ์ฐฝ์์ ์๋์ ๊ฐ์ด NPM ๋ก๊ทธ์ธ
$ npm login
์์ด๋์ ๋น๋ฒ์ ์ฐจ๋ก๋ก ์ ๋ ฅํ๋ฉด ๋ก๊ทธ์ธ์ด ์๋ฃ๋ฉ๋๋ค.
7.NPM ๋ฐฐํฌ ๋ช ๋ น์ด๋ก ํ์ผ ๋ฐฐํฌ
$ npm publish
๋ฐฐํฌ๊ฐ ์๋ฃ๋๋ฉด NPM ์ฌ์ดํธ์์ ๋ก๊ทธ์ธ ํ ํ ์ฌ๋ผ์จ ํจํค์ง๋ฅผ ํ์ธํฉ๋๋ค.
NPM์ผ๋ก ์ค์น ๊ฐ๋ฅํ ESLint ๊ท์น ํ์ผ ์์ฑํ๊ธฐ
ESLint๊ฐ ์ค์ ๋ ํ๋ก์ ํธ์ ๋๋ง์ ๊ท์น์ npm์ผ๋ก ์ค์นํ๊ณ ์ถ๋ค๋ฉด ๋ค์ 2๊ฐ์ง ์ฌํญ์ ๋ฐ๋ผ์ผ ํฉ๋๋ค.
package.json
ํ์ผ์name
์์ฑ์eslint-config-
๋ก ์์ํด์ผ ํฉ๋๋ค.- ํด๋น ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ์
index.js
ํ์ผ์ ์์ฑํ์ฌ ์๋์ ๊ฐ์ ํ์์ผ๋ก ESLint ๊ท์น์ ์ถ๊ฐํฉ๋๋ค.
// index.js
module.exports = {
rules: {
// ...
},
extends: [
// ...
]
}
์ด๋ ๊ฒ ๊ตฌ์ฑํ ๋ด์ฉ์ npm publish
๋ก ๋ฐฐํฌํ๊ณ , ๋ทฐ CLI ํ๋ก์ ํธ์์ ํด๋น ํจํค์ง๋ฅผ npm i
๋ก ์ค์นํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํ๋ก์ ํธ์ ESLint ๋ฃฐ์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๋์์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋ฐฐํฌํ NPM ํจํค์ง(๋ชจ๋) ์ค์นํ๊ธฐ
๋ฐฉ๊ธ ์ ์ ๋ฐฐํฌํ NPM ํจํค์ง๋ฅผ ํ๋ก์ ํธ์ ์ค์นํ๋ ค๋ฉด ์๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํฉ๋๋ค.
$ npm i <ํจํค์ง ์ด๋ฆ>
ํจํค์ง ์ด๋ฆ์ NPM ๋ฐฐํฌ ๋ช
๋ น์ด๋ฅผ ์ํํ๋ ํ๋ก์ ํธ์ package.json
์ ์๋ name
์ ์ฐธ๊ณ ํฉ๋๋ค.
๋ฐฐํฌํ ESLint ๋ฃฐ์ ํ๋ก์ ํธ์ ์ ์ฉํ๊ธฐ
ESLint ๋ฃฐ์ ๋ทฐ CLI๋ก ์์ฑํ ํ๋ก์ ํธ์ ์ ์ฉํ๋ ค๋ฉด ํด๋น ๋ทฐ ํ๋ก์ ํธ์ ESLint์ Prettier๊ฐ ์ค์ ๋์ด ์์ด์ผ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ค์น ๋ช
๋ น์ด npm i <ํจํค์ง ์ด๋ฆ>
์ ์ด์ฉํด NPM ๋ชจ๋์ ์ค์นํ๊ณ ๋๋ฉด ํ๋ก์ ํธ์ .eslintrc
ํ์ผ์ ์๋์ ๊ฐ์ด ์ค์ ํ ์ ์์ต๋๋ค.
// .eslintrc
module.exports = {
extends: ['eslint-config-example1']
}
์ค์น๊ฐ ๋๋ฉด ์๋์ ๊ฐ์ด package.json
์ ํจํค์ง ๋ด์ฉ์ด ์ถ๊ฐ๋ฉ๋๋ค.
// package.json
{
"devDependencies": {
"eslint-config-example1": "^1.0.0"
}
}
์ฌ๊ธฐ์๋ ์์๋ก eslint-config-example1
๋ฅผ ์ฌ์ฉํ์์ผ๋ฉฐ ์ค์ ๋ก๋ ๋ฐฐํฌํ ํจํค์ง ์ด๋ฆ์ ๋ฃ์ด์ฃผ์๋ฉด ๋ฉ๋๋ค.
๋ฐฐํฌํ NPM ํจํค์ง ๊พธ๋ฏธ๊ธฐ
์์์ NPM ํจํค์ง๋ฅผ ๋ฐฐํฌํ๊ธฐ ์ํด npm init -y
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ต๋๋ค.
์ด ์ต์
์ package.json
ํ์ผ์ ๋ด์ฉ์ ๊ธฐ๋ณธ ๊ฐ์ผ๋ก ์์ฑํด์ฃผ๋ ๊ฒ์ธ๋ฐ,
์ค์ ๋ก ํด๋น NPM ํจํค์ง๋ฅผ ๊ณ์ ๊ฐ์ ํ๊ณ ์ ์งํ๋ ค๋ฉด ์๋์ ๊ฐ์ ๊ฐ๋ค์ ์ค์ ํด์ฃผ๋ฉด ์ข์ต๋๋ค.
{
"name": "ํจํค์ง ์ด๋ฆ(์ด๊ธฐ์ ํ๋ฒ๋ง ์ค์ )",
"version": "ํจํค์ง ๋ฒ์ (๋ฐฐํฌํ ๋ ๋ง๋ค ํ๋์ฉ ์ฌ๋ ค์ค์ผ ํจ)",
"keywords": "npm์์ ๊ฒ์ํ ๋ ์ ๋
ธ์ถ๋ ์ ์๊ฒ ๊ด๋ จ ํค์๋ ์ค์ ",
"author": "์ ์์ ์ด๋ฆ",
"license": "๋ผ์ด์ผ์ค ์ข
๋ฅ",
"description": "ํจํค์ง ์ค๋ช
"
}
์ด์ธ์๋ repository
๋ homepage
๋ ๋ณดํต npm init -y
๋ก ์๋ ์ค์ ๋์ง๋ง ์ํ๋ฉด ๋ฐ๊ฟ ์ ์์ต๋๋ค.
์์ฑ๋ ๊ฒฐ๊ณผ๋ฌผ
์ด๋ ๊ฒ ํด์ ์์ฑ๋ ๊ฒฐ๊ณผ๋ฌผ์ ํ์ฌ NPM ํ์ด์ง์ ์ฌ๋ผ๊ฐ ์์ต๋๋ค.
์ฌ์ฉํด๋ณด๊ณ ์ถ์ ๋ถ๋ค์ ๊นํ ๋ฆฌํฌ์งํ ๋ฆฌ ์๋ด๋ฌธ์ ๋ฐ๋ผ ์ค์นํด๋ณด์ธ์ ๐
์ฐธ๊ณ ์๋ฃ
- Understanding Scoped Packages
- ESLint Sharable Config
- Nuxt ESLint Config
- ESLint Plugin Vue - Recommended Options