NPM ๋ฐฐํฌํ•˜๊ธฐ - Vue.js ESLint ํŒจํ‚ค์ง€

๋“ค์–ด๊ฐ€๋ฉฐ

์ด๋ฒˆ์— ์‹ ๊ทœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์˜ค๋žœ๋งŒ์— 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 ํŽ˜์ด์ง€์— ์˜ฌ๋ผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

npm package intro page

์‚ฌ์šฉํ•ด๋ณด๊ณ  ์‹ถ์€ ๋ถ„๋“ค์€ ๊นƒํ—™ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์•ˆ๋‚ด๋ฌธ์„ ๋”ฐ๋ผ ์„ค์น˜ํ•ด๋ณด์„ธ์š” ๐Ÿ˜„

์ฐธ๊ณ  ์ž๋ฃŒ