# Vue CLI๋กœ ์ƒ์„ฑํ•œ ํ”„๋กœ์ ํŠธ์˜ ์›นํŒฉ ์„ค์ • ๋ฐฉ๋ฒ•

Vue CLI๋กœ ์ƒ์„ฑํ•œ ํ”„๋กœ์ ํŠธ์— ์›นํŒฉ ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? ์›นํŒฉ ์„ค์ • ํ™•์ธ & ๋ณ€๊ฒฝ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

# Vue CLI๋กœ ์ƒ์„ฑํ•œ ํ”„๋กœ์ ํŠธ์™€ ์›นํŒฉ์˜ ๊ด€๊ณ„?

๋ณดํ†ต Vue.js๋ฅผ ๋ฐฐ์šฐ๊ณ  ๋‚˜๋ฉด ์‹ค์ œ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ ๋ทฐ CLI๋ฅผ ์ด์šฉํ•ด์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ• ํ…๋ฐ์š”.

vue create my-project

์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ ๋ทฐ ํ”„๋กœ์ ํŠธ๋Š” ์›นํŒฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

  • npm run serve : ๋กœ์ปฌ ์„œ๋ฒ„๋ฅผ ์›นํŒฉ ๋ฐ๋ธŒ ์„œ๋ฒ„๋กœ ์‹คํ–‰
  • npm run build : ์›นํŒฉ์œผ๋กœ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผ ๋ณ€ํ™˜(๋นŒ๋“œ)

TIP

์›นํŒฉ์€ ์ตœ์‹  ํ”„๋ŸฐํŠธ์—”๋“œ ๋นŒ๋“œ ์‹œ์Šคํ…œ์˜ ํ•ต์‹ฌ์ด ๋˜๋Š” ๋นŒ๋“œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์›นํŒฉ์„ ์ž˜ ๋ชจ๋ฅด์‹œ๋Š” ๋ถ„๋“ค์€ ์›นํŒฉ ๊ฐ•์˜ (opens new window)๋‚˜ ์›นํŒฉ ํ•ธ๋“œ๋ถ (opens new window)์„ ์ฐธ๊ณ ํ•ด์„œ ํ•™์Šตํ•ด ๋ณด์„ธ์š” ๐Ÿ˜„

# ์ƒ์„ฑ๋œ ๋ทฐ ํ”„๋กœ์ ํŠธ์— ์›นํŒฉ ์„ค์ • ํŒŒ์ผ์ด ์•ˆ๋ณด์ด๋Š”๋ฐ์š”?

๋ทฐ CLI ๋ฒ„์ „ 2 ์ดํ•˜์—์„œ๋Š” ์›นํŒฉ ์„ค์ • ํŒŒ์ผ(webpack.config.js)์ด ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๋ ˆ๋ฒจ์— ๋…ธ์ถœ๋˜์–ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ถ€๋ถ„์ด ์›นํŒฉ์— ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ๋Š” ๋ถ€๋‹ด์ด ๋˜์—ˆ๋Š”๋ฐ์š”. ๊ทธ๋ž˜์„œ ๋ทฐ CLI ๋ฒ„์ „ 3 ์ด์ƒ๋ถ€ํ„ฐ๋Š” ์›นํŒฉ ์„ค์ • ํŒŒ์ผ์„ ์•„๋ž˜์™€ ๊ฐ™์ด vue-cli-service๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๊ฐ์ถ”์–ด ๋†“์•˜์Šต๋‹ˆ๋‹ค.

cli service ๋ฐ‘์˜ ์›นํŒฉ ์„ค์ • ํŒŒ์ผ

์œ„ ํด๋” ์œ„์น˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

src
node_modules
  @vue
    cli-service
...

๊ฒฐ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ๋Š” ์„œ๋ฒ„ ์‹œ์ž‘ ๋ช…๋ น์–ด์™€ ๋นŒ๋“œ ๋ช…๋ น์–ด๋งŒ ์•Œ๋ ค์ฃผ๋ฉด ์›นํŒฉ์€ ๋ชฐ๋ผ๋„ ๋˜๊ฒŒ๋” ๊ธฐ๋ณธ์ ์ธ ์„ค์ •์„ ํ•ด๋†“์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

// package.json
{
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build"
  }
}

# ๊ทธ๋Ÿผ ํ”„๋กœ์ ํŠธ์— ์„ค์ •๋˜์–ด ์žˆ๋Š” ์›นํŒฉ ์˜ต์…˜ ์†์„ฑ์„ ์–ด๋–ป๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๋‚˜์š”?

๋งŒ์•ฝ ์›นํŒฉ ์„ค์ • ํŒŒ์ผ webpack.config.js๊ฐ€ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๋ ˆ๋ฒจ๋กœ ๋‚˜์™€ ์žˆ๋‹ค๋ฉด ๋ฐ”๋กœ ๋ณด๋ฉด ๋˜๊ฒ ์ง€๋งŒ vue-cli-service ๋‚ด๋ถ€์— ์—ฌ๋Ÿฌ ํŒŒ์ผ๋“ค๋กœ ๋‚˜๋‰˜์–ด์ ธ ์žˆ์–ด ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ด ๋•Œ ํ”„๋กœ์ ํŠธ์— ์„ค์ •๋œ ์›นํŒฉ ์˜ต์…˜๋“ค์„ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

vue inspect > options.js

์œ„ ๋ช…๋ น์–ด๋ฅผ ์น˜๋ฉด ํ”„๋กœ์ ํŠธ ๋‚ด๋ถ€์ ์œผ๋กœ ์„ค์ •๋œ ์›นํŒฉ์˜ ์˜ต์…˜๋“ค์„ options.js ํŒŒ์ผ์— ๋‹ด์•„์ค๋‹ˆ๋‹ค. ์ด์ œ options.js ํŒŒ์ผ์„ ์—ด์–ด๋ณด๋ฉด ์•„๋ž˜ ๋‚ด์šฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

inspect ๊ฒฐ๊ณผ ํŒŒ์ผ

# ํ”„๋กœ์ ํŠธ์˜ ์›นํŒฉ ์„ค์ •์„ ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด?

ํ”„๋กœ์ ํŠธ์— ์„ค์ •๋˜์–ด ์žˆ๋Š” ์›นํŒฉ์˜ ์˜ต์…˜๋“ค์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด vue.config.js ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

// vue.config.js
module.exports = {
  outputDir: 'my-dist',
}

์œ„ outputDir ์†์„ฑ์€ ์›นํŒฉ ์„ค์ • ํŒŒ์ผ์˜ output.path (opens new window)์™€ ๋™์ผํ•œ ์˜ต์…˜์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ทฐ CLI์˜ ๊ณต์‹ ๊ฐ€์ด๋“œ์— ์•ˆ๋‚ด๋œ ๋‚ด์šฉ (opens new window)์„ ๋”ฐ๋ผ ์›นํŒฉ ์„ค์ •์„ ๋ณ€๊ฒฝํ•ด ์ฃผ์…”์•ผ ์ตœ์ข… ๋นŒ๋“œ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณ€๊ฒฝํ•œ ๊ฐ’์ด ํ•จ๊ป˜ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ด์™ธ์—๋„ ์•„๋ž˜์™€ ๊ฐ™์€ ์˜ต์…˜๋“ค์„ ์ด์šฉํ•˜์—ฌ ์›นํŒฉ ์„ค์ •์„ ์ถ”๊ฐ€ ๋˜๋Š” ์ฒด์ด๋‹์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// vue.config.js
module.exports = {
  // ์˜ต์…˜ ์ถ”๊ฐ€
  configureWebpack: {
    plugins: [
      new MyAwesomeWebpackPlugin()
    ]
  },
  // ์˜ต์…˜ ์ฒด์ด๋‹
  configureWebpack: config => {
    if (process.env.NODE_ENV === 'production') {
      // mutate config for production...
    } else {
      // mutate for development...
    }
  }
}

์˜ต์…˜ ์ถ”๊ฐ€์™€ ์ฒด์ด๋‹ ๋ฐฉ๋ฒ•์˜ ์ •ํ™•ํ•œ ๊ฐ€์ด๋“œ (opens new window)๋Š” CLI ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š” ๐Ÿ˜ƒ