๐Ÿ’ก ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœํ™˜๊ฒฝ์— ๋Œ€ํ•ด์„œ ์ž˜ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐ€์žฅ ํ•„์ˆ˜์ธ Webpack(์›นํŒฉ).
์›นํŒฉ์ด๋ž€ ๋ฌด์—‡์ด๊ณ , ์—”ํŠธ๋ฆฌ์™€ ์•„์›ƒํ’‹์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


Webpack(์›นํŒฉ)์ด๋ž€?

๋ชจ๋“ˆ๋กœ ๊ฐœ๋ฐœ์„ ํ•˜๊ฒŒ๋˜๋ฉด, ๋ชจ๋“ˆ๊ฐ„์˜ ์˜์กด ๊ด€๊ณ„๊ฐ€ ์ƒ๊น๋‹ˆ๋‹ค. (ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ์ธ JS์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์„ import ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.)
-> App.js๊ฐ€ math.js๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ํ˜•์‹์ด๋ผ๋ฉด, ๊ทธ๋Ÿผ app.js๋Š” math.js๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์˜์กด ๊ด€๊ณ„์— ์žˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ด์ฒ˜๋Ÿผ, Webpack(์›นํŒฉ)์€ ์—ฌ๋Ÿฌ๊ฐœ์˜ js ํŒŒ์ผ์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š”๋ฐ ์ด๋ฅผ ๋ฒˆ๋“ค ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ Webpack(์›นํŒฉ)์„ ๋ฒˆ๋“ค๋Ÿฌ๋ผ๊ณ ๋„ ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

  • Webpack(์›นํŒฉ) ํŒจํ‚ค์ง€: ๋ฒˆ๋“ค ์ž‘์—…์„ ํ•˜๋Š” ๊ฒƒ
  • webpack-cli: Webpack(์›นํŒฉ)์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ


์—”ํŠธ๋ฆฌ์™€ ์•„์›ƒํ’‹

์—”ํŠธ๋ฆฌ(entry point): ํ•˜๋‚˜์˜ ์‹œ์ž‘์ 
์—”ํŠธ๋ฆฌ๋กœ๋ถ€ํ„ฐ ๋ชจ๋“  ์˜์กด์ ์ธ ๋ชจ๋“ˆ์„ ์ „๋ถ€ ์ฐพ์•„๋‚ด์„œ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ๋งŒ๋“ค์–ด๋ƒ…๋‹ˆ๋‹ค.
-> app.js๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด math.js ํŒŒ์ผ์„ ์ฐพ์€ ๋’ค ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ!

๋ฒˆ๋“ค ๊ฒฐ๊ณผ ์ €์žฅํ•˜๊ธฐ

  • โ€“mode๋Š” ์›นํŒฉ ์‹คํ–‰ ๋ชจ๋“œ๋Š” ์˜๋ฏธํ•˜๋Š”๋ฐ ๊ฐœ๋ฐœ ๋ฒ„์ „์ธ development๋ฅผ ์ง€์ •
  • โ€“entry๋Š” ์‹œ์ž‘์  ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜๋Š” ์˜ต์…˜
  • โ€“output์€ ๋ฒˆ๋“ค๋ง ๊ฒฐ๊ณผ๋ฌผ์„ ์œ„์น˜ํ•  ๊ฒฝ๋กœ


๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด dist/main.js์— ๋ฒˆ๋“ค๋œ ๊ฒฐ๊ณผ๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

  node_modules/.bin/webpack --mode development --entry ./src/app.js --output-path dist/


Webpack(์›นํŒฉ) ์„ค์ • ํŒŒ์ผ

๊ธฐ๋ณธ ํŒŒ์ผ๋ช…

  • webpack.config.js
  • webpackfile.js

ํŒŒ์ผ ์„ค์ • ๋ฐ ์„ค๋ช…

const path = require('path');

module.exports = {
    mode: 'development',
    entry: {
        main: './src/app.js'
    },
    output: {
        path: path.resolve('./dist'),
        filename: '[name].js'
    }
}

ํ„ฐ๋ฏธ๋„์—์„œ ์‚ฌ์šฉํ•œ ์˜ต์…˜์ธ mode, entry, ouput์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
output.path๋Š” ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— path ๋ชจ๋“ˆ์˜ resolve() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

  • mode๋Š” โ€˜developmentโ€™ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • entry๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ง„์ž…์ ์ธ src/app.js๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ouput์— ์„ค์ •ํ•œ โ€˜[name]โ€™์€ entry์— ์ถ”๊ฐ€ํ•œ main์ด ๋ฌธ์ž์—ด๋กœ ๋“ค์–ด์˜ค๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

Webpack(์›นํŒฉ) ์‹คํ–‰

package.json์—์„œ ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค.
์ €๋Š” ๋ชจ๋“  ์˜ต์…˜์„ ์›นํŒฉ ์„ค์ • ํŒŒ์ผ๋กœ ์˜ฎ๊ฒผ๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ˆœํžˆ webpack ๋ช…๋ น์–ด๋งŒ ์‹คํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค. npm run build๋กœ ์›นํŒฉ ์ž‘์—…์„ ์ง€์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"scripts": {
  "build": "webpack"
}