๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • What would life be If we had no courage to attemp anything?
Development/Vue.js

Vue.js - Babel & Webpack

by DevIseo 2022. 5. 9.

๐Ÿ””Babel & Webpack

|Babel — ๋ฒ„์ „ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ ๋„๊ตฌ

“JavaScript compiler”

ES6 ์ดํ›„ ๋ฒ„์ „์„ ES5 ๋ฒ„์ „ ์ดํ•˜๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ!

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ECMAScript 2015+ ์ฝ”๋“œ๋ฅผ ์ด์ „ ๋ฒ„์ „์œผ๋กœ ๋ฒˆ์—ญ/๋ณ€ํ™˜ํ•ด ์ฃผ๋Š” ๋„๊ตฌ
  • ๊ณผ๊ฑฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํŒŒํŽธํ™”์™€ ํ‘œ์ค€ํ™”์˜ ์˜ํ–ฅ์œผ๋กœ ์ฝ”๋“œ์˜ ์ŠคํŽ™ํŠธ๋Ÿผ์ด ๋งค์šฐ ๋‹ค์–‘
    • ์ด ๋•Œ๋ฌธ์— ์ตœ์‹  ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•ด๋„ ์ด์ „ ๋ธŒ๋ผ์šฐ์ € ํ˜น์€ ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒ
  • ์›์‹œ ์ฝ”๋“œ(์ตœ์‹  ๋ฒ„์ „)๋ฅผ ๋ชฉ์  ์ฝ”๋“œ(๊ตฌ ๋ฒ„์ „)๋กœ ์˜ฎ๊ธฐ๋Š” ๋ฒˆ์—ญ๊ธฐ๊ฐ€ ๋“ฑ์žฅํ•˜๋ฉด์„œ ๊ฐœ๋ฐœ์ž๋Š” ๋” ์ด์ƒ ๋‚ด ์ฝ”๋“œ๊ฐ€ ํŠน์ • ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์— ๋Œ€ํ•ด ํฌ๊ฒŒ ๊ณ ๋ฏผํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๊ฒŒ ๋จ

|Webpack — “ํŒŒ์ผ ๋ฒˆ๋“ค๋ง ๋„๊ตฌ”, ๋ฒˆ๋“ค๋ง === ํ•ฉ์นœ๋‹ค!

“static module bundler”

  • ๋ชจ๋“ˆ ๊ฐ„์˜ ์˜์กด์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ
  • ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋ชจ๋“ˆ์„ ๋งคํ•‘ํ•˜๊ณ  ๋‚ด๋ถ€์ ์œผ๋กœ ์ข…์†์„ฑ ๊ทธ๋ž˜ํ”„๋ฅผ ๋นŒ๋“œํ•จ

 

|Static Module Bundler

  • ๋ชจ๋“ˆ์€ ๋‹จ์ง€ ํŒŒ์ผ ํ•˜๋‚˜๋ฅผ ์˜๋ฏธ (ex. js ํŒŒ์ผ ํ•˜๋‚˜ === ๋ชจ๋“ˆ ํ•˜๋‚˜)
  • ๋ฐฐ๊ฒฝ
    • ๋ธŒ๋ผ์šฐ์ €๋งŒ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ์‹œ๊ธฐ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ชจ๋“ˆ ๊ด€๋ จ ๋ฌธ๋ฒ• ์—†์ด ์‚ฌ์šฉ ๋จ
    • ํ•˜์ง€๋งŒ JS์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ณต์žกํ•ด์ง€๊ณ  ํฌ๊ธฐ๊ฐ€ ์ปค์ง€์ž ์ „์—ญ scope๋ฅผ ๊ณต์œ ํ•˜๋Š” ํ˜•ํƒœ์˜ ๊ธฐ์กด ๊ฐœ๋ฐœ ๋ฐฉ์‹์˜ ํ•œ๊ณ„์ ์ด ๋“œ๋Ÿฌ๋‚จ
    • ๊ทธ๋ž˜์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด ํ•„์š”ํ•œ ๋ชจ๋“ˆ์„ ์–ธ์ œ๋“ ์ง€ ๋ถˆ๋Ÿฌ์˜ค๊ฑฐ๋‚˜ ์ฝ”๋“œ๋ฅผ ๋ชจ๋“ˆ ๋‹จ์œ„๋กœ ์ž‘์„ฑํ•˜๋Š” ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ์‹œ๋„๊ฐ€ ์ด๋ฃจ์–ด์ง —>๋ชจ๋“ˆ === ํŒŒ์ผ!
  • ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ
    • ESM(ECMA Script Module)
    • AMD(Asynchronous Module Definition)
    • CommonJS
    • UMD(Universal Module Definition)

 

|Module ์˜์กด์„ฑ ๋ฌธ์ œ —>Webpack์„ ํ†ตํ•ด ํ•ด๊ฒฐ!

  • ๋ชจ๋“ˆ์˜ ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜น์€ ๋ชจ๋“ˆ ๊ฐ„์˜ ์˜์กด์„ฑ(์—ฐ๊ฒฐ์„ฑ)์ด ๊นŠ์–ด์ง€๋ฉด์„œ ํŠน์ •ํ•œ ๊ณณ์—์„œ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ๊ฐ€ ์–ด๋–ค ๋ชจ๋“ˆ ๊ฐ„์˜ ๋ฌธ์ œ์ธ์ง€ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์›€
  • ์ฆ‰, Webpack์€ ์ด ๋ชจ๋“ˆ ๊ฐ„์˜ ์˜์กด์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅ

 

 

|Static Module Bundler

  • ๋ชจ๋“ˆ ์˜์กด์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์ฃผ๋Š” ์ž‘์—…์„ Bundling์ด๋ผ ํ•จ
  • ์ด๋Ÿฌํ•œ ์ผ์„ ํ•ด์ฃผ๋Š” ๋„๊ตฌ๊ฐ€ Bundler์ด๊ณ , Webpack์€ ๋‹ค์–‘ํ•œ Bundler ์ค‘ ํ•˜๋‚˜
  • ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์ฃผ๊ณ  ๋ฌถ์ธ ํŒŒ์ผ์€ ํ•˜๋‚˜(ํ˜น์€ ์—ฌ๋Ÿฌ ๊ฐœ)๋กœ ํ•ฉ์ณ์ง
  • Bundling๋œ ๊ฒฐ๊ณผ๋ฌผ์€ ๋” ์ด์ƒ ์ˆœ์„œ์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ณ  ๋™์ž‘ํ•˜๊ฒŒ ๋จ
  • snowpack, parcel, rollup.js ๋“ฑ์˜ webpack ์ด์™ธ์—๋„ ๋‹ค์–‘ํ•œ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ ์กด์žฌ
  • Vue CLI๋Š” ์ด๋Ÿฌํ•œ Babel, Webpack์— ๋Œ€ํ•œ ์ดˆ๊ธฐ ์„ค์ •์ด ์ž๋™์œผ๋กœ ๋˜์–ด ์žˆ์Œ

|node-module์˜ ์˜์กด์„ฑ ๊นŠ์ด

|Webpack

๋‹ค ํ•ฉ์ณ์„œ ํ•˜๋‚˜๋กœ ๋งŒ๋“ค๊ฒ ๋‹ค!

|์ •๋ฆฌ

  • Node.js
    • JavaScript Runtime Environment
    • JavaScript๋ฅผ ๋ธŒ๋ผ์šฐ์ € ๋ฐ–์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ํ™˜๊ฒฝ
  • Babel
    • Compiler
    • ES2015+ JavaScript ์ฝ”๋“œ๋ฅผ ๊ตฌ ๋ฒ„์ „์˜ JavaScript๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๋„๊ตฌ
  • Webpack
    • Module Bundler
    • ๋ชจ๋“ˆ ๊ฐ„์˜ ์˜์กด์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ

 


|Vue ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

 

 

|node_modules, public/index.html

  • node_modules — Django์˜ venv, ์šฉ๋Ÿ‰์ด ์ปค์„œ ๊ณต์œ  ์‹œ ์ง€์šธ ๊ฒƒ!
    • node.js ํ™˜๊ฒฝ์˜ ์—ฌ๋Ÿฌ ์˜์กด์„ฑ ๋ชจ๋“ˆ
  • public/index.html
    • Vue ์•ฑ์˜ ๋ผˆ๋Œ€๊ฐ€ ๋˜๋Š” ํŒŒ์ผ
    • ์‹ค์ œ ์ œ๊ณต๋˜๋Š” ๋‹จ์ผ html ํŒŒ์ผ

 

 

|src/assets, src/components, src/App.vue

  • src/assets
    • webpack์— ์˜ํ•ด ๋นŒ๋“œ ๋œ ์ •์  ํŒŒ์ผ ex)์ด๋ฏธ์ง€ํŒŒ์ผ
  • src/components
    • ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์œ„์น˜
  • src/App.vue
    • ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ

 

 

|babel.config.js, package.json

  • babel.config.js
    • babel ๊ด€๋ จ ์„ค์ •์ด ์ž‘์„ฑ๋œ ํŒŒ์ผ
  •  package.json -->Django์˜ requirements.txt ์—ญํ• !
    • ํ”„๋กœ์ ํŠธ์˜ ์ข…์†์„ฑ ๋ชฉ๋ก๊ณผ ์ง€์›๋˜๋Š” ๋ธŒ๋ผ์šฐ์ €์— ๋Œ€ํ•œ ๊ตฌ์„ฑ ์˜ต์…˜์ด ํฌํ•จ

 

|package-lock.json

  • package-lock.json
    • node_modules์— ์„ค์น˜๋˜๋Š” ๋ชจ๋“ˆ๊ณผ ๊ด€๋ จ๋œ ๋ชจ๋“  ์˜์กด์„ฑ์„ ์„ค์ • ๋ฐ ๊ด€๋ฆฌ
    • ํŒ€์› ๋ฐ ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ ์ •ํ™•ํžˆ ๋™์ผํ•œ ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜๋„๋ก ๋ณด์žฅํ•˜๋Š” ํ‘œํ˜„
    • ์‚ฌ์šฉ ํ•  ํŒจํ‚ค์ง€์˜ ๋ฒ„์ „์„ ๊ณ ์ •
    • ๊ฐœ๋ฐœ ๊ณผ์ • ๊ฐ„์˜ ์˜์กด์„ฑ ํŒจํ‚ค์ง€ ์ถฉ๋Œ ๋ฐฉ์ง€

 

'Development > Vue.js' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Vue.js - Vue Router  (0) 2022.05.09
Vue.js - Pass Props & Emit Events  (0) 2022.05.09
Vue.js - Vue CLI  (0) 2022.05.09
Vue.js - SFC(Single File Component)  (0) 2022.05.09
Vue.js - Lifecycle Hooks  (0) 2022.05.07

๋Œ“๊ธ€