๊ด€๋ฆฌ ๋ฉ”๋‰ด

C-log

๐Ÿ”งWebpack : Entry ๋ณธ๋ฌธ

โš›๏ธReact/๐Ÿ”งFront-Dev-Environment

๐Ÿ”งWebpack : Entry

4:Bee 2024. 6. 21. 09:27
728x90

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


Webpack

์›นํŒฉ์€ ๋ชจ๋“ˆ๋กœ ์—ฐ๊ฒฐ(์˜์กด)๋œ ๋ชจ๋“  ํŒŒ์ด๋“ค์„ ํ•˜๋‚˜๋กœ ํ•ฉ์ณ์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•ฉ์ณ์ง„ ํŒŒ์ผ์„ ๋ฒˆ๋“ค์ด๋ผ๊ณ  ํ•œ๋‹ค. ์›นํŒฉ์ด ๋ฒˆ๋“ค์„ ๋งŒ๋“œ๋Š” ๋ฒˆ๋“ค๋Ÿฌ ์—ญํ• ์„ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์›นํŒฉ์„ ๋ฒˆ๋“ค๋Ÿฌ๋ผ๊ณ ๋„ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์›นํŒฉ์„ ์„ค์น˜ํ•˜๋Š” lic๋ฅผ ์„ค์น˜ํ•  ๊ฒƒ์ด๋‹ค.

:: CMD

::npm
npm install webpack webpack-cli --dev
npm install -D webpack webpack-cli

::yarn
yarn add webpack webpack-cli --dev
yarn add -D webpack webpack-cli

์„ค์น˜๊ฐ€ ์™„๋ฃŒ๊ฐ€ ๋˜๋ฉด package.json์— devDependencies๊ฐ€ ์‚ฝ์ž…๋œ๊ฑธ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ฐœ๋ฐœ์šฉ ํŒจํ‚ค์ง€๋Š” devDependencies์— ์ ์šฉ์ด ๋˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด dependencies์— ์ ์šฉ์ด ๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.


Entry

์›นํŒฉ์ด ์‹œ์ž‘ํ•˜๋Š” ๋ถ€๋ถ„์€ Entry๋ผ๊ณ  ํ•œ๋‹ค. ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์„ output์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ด์ œ webpack ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒฝ๋กœ๋ฅผ ์„ค์น˜ ํ•ด์•ผํ•œ๋‹ค.

:: CMD

::npx
"node_modules/.bin/webpack" --help       :: ์ง€์ • ์œ„์น˜๋ฅผ ํ†ตํ•œ ํŠน์ • ๋ช…๋ น์–ด ์‚ฌ์šฉ
"node_modules/.bin/webpack" --mode development --entry ./src/app.js --output dist/main.js
npx webpack --mode development --entry ./src/app.js --output dist/main.js

::yarn
yarn webpack --mode development --entry ./src/app.js --output dist/main.js

* ์ฃผ์˜ ์‚ฌํ•ญ์œผ๋ก  ๋งฅ๊ณผ ๋‹ฌ๋ฆฌ ์œˆ๋„์šฐ์—์„  ์ง€์ • ์œ„์น˜์˜ ํŠน์ • ๋ช…๋ น์–ด(--help, --output, etc)๋ฅผ ์‚ฌ์šฉํ•  ์‹œ์—๋Š” ๋”ฐ์˜ดํ‘œ("")๋ฅผ ๊ฐ์‹ธ์ค˜์•ผ ํ•ด๋‹น ์œ„์น˜๋ฅผ ์ธ์‹ ํ•˜๋ฉฐ ํŠน์ • ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ์ฃผ์˜ ํ•ด์•ผํ•œ๋‹ค.

* ์ฐธ๊ณ ๋กœ webpack 5์˜ ๊ฒฝ์šฐ --output ์˜ต์…˜์€ ๋ช…๋ น์ค„์— ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. webpack-config.js ํŒŒ์ผ ๋‚ด์— output ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•ด์•ผํ•œ๋‹ค. ๋ณธ์ธ์€ webpack 4๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ ํ–ˆ๋‹ค.

* ์ถ”๊ฐ€์ ์œผ๋กœ  npm์€ node_modules์— ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค ๋”ฐ๋ผ์„œ npx๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ ‘๊ทผ์„ ํ•ด์•ผํ•œ๋‹ค.

* ์œ„์˜ ๋ฐฉ๋ฒ•์€ ๋ช…๋ น์–ด๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด์ง€๋งŒ ์ง์ ‘ config ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

/* package.json */

//์ˆ˜์ • ์ „
"dependencies": {
  "webpack": "^5.0.0",
  "webpack-cli": "^4.0.0"
}

//์ˆ˜์ • ํ›„
"devDependencies": {
    "webpack": "^4.41.5",
    "webpack-cli": "^3.3.10"
  }

์ž˜ ์„ค์น˜๊ฐ€ ๋˜๊ณ ๋‚˜๋ฉด distํด๋”๊ฐ€ ์ƒ์„ฑ๋œ ๊ฑธ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ดํ›„์— html๋กœ distํด๋”์˜ main.js๋ฅผ ์—ฐ๊ฒฐํ•ด์„œ ์‹คํ–‰์„ ํ•ด๋ณด๋ฉด ์ •์ƒ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 


webpack.config.js

webpack.config๋ฅผ ์„ค์ • ํ•ด๋ณผ ๊ฒƒ์ด๋‹ค.

/* webpack.config.js */

const path = require('path');

module.exports = {
  mode: 'development',
  entry: {
    main: './src/app.js',
  },
  output: {
    path: path.resolve('./dist'),
    filename: '[name].js'
  }
}
  • path  : path ๋ชจ๋“ˆ์€ Node.js์˜ ๊ธฐ๋ณธ ๋ชจ๋“ˆ ์ค‘ ํ•˜๋‚˜๋กœ, ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ฒฝ๋กœ๋ฅผ ์‰ฝ๊ฒŒ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค€๋‹ค. ์ด ๊ตฌ์„ฑ์—์„œ๋Š” ์ถœ๋ ฅ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
  • module.exports : Node.js์—์„œ ๋ชจ๋“ˆ์„ ๋‚ด๋ณด๋‚ผ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ๋ฌธ์ด๋‹ค. ES6์—์„œ ์ œ๊ณต๋˜๋Š” ๋ชจ๋“ˆ์ด ์‹œ์Šคํ…œ์ด ์•„๋‹ˆ๋ผ๋Š” ์  ์œ ๋… ํ•˜์ž. ์ด ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์›นํŒฉ์˜ ์—ฌ๋Ÿฌ ์„ค์ •์„ ์ •์˜ํ•œ๋‹ค.
  • mode : ์›นํŒฉ์˜ ๋นŒ๋“œ ๋ชจ๋“œ๋ฅผ ์„ค์ •ํ•œ๋‹ค. 'development' ๋ชจ๋“œ๋Š” ๊ฐœ๋ฐœ ์ค‘์— ์œ ์šฉํ•œ ๋„๊ตฌ์™€ ์„ค์ •์„ ํ™œ์„ฑํ™”ํ•˜์—ฌ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋„์›€์„ ์ค€๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋” ๋น ๋ฅธ ๋นŒ๋“œ ์‹œ๊ฐ„๊ณผ ๋” ์ƒ์„ธํ•œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“œ๋กœ๋Š” 'production'์ด ์žˆ๋Š”๋ฐ, ์ด๋Š” ์ตœ์ ํ™”๋˜๊ณ  ์••์ถ•๋œ ์ž์‚ฐ์„ ์ƒ์„ฑํ•œ๋‹ค.
  • entry : ์›นํŒฉ์ด ๋นŒ๋“œ๋ฅผ ์‹œ์ž‘ํ•  ์ง„์ž…์ ์„ ์ •์˜ํ•œ๋‹ค. ์ด ์˜ˆ์ œ์—์„œ๋Š” main์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์ง„์ž…์ ์ด './src/app.js'๋กœ ์„ค์ •๋˜์–ด ์žˆ๋‹ค. ์ด๋Š” ์›นํŒฉ์ด ์ด ํŒŒ์ผ์„ ๋นŒ๋“œ์˜ ์‹œ์ž‘์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ ์ด ํŒŒ์ผ์—์„œ ์ฐธ์กฐํ•˜๋Š” ๋ชจ๋“  ๋ชจ๋“ˆ๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฒˆ๋“ค๋งํ•œ๋‹ค.
  • output : ๋นŒ๋“œ๋œ ํŒŒ์ผ๋“ค์ด ์–ด๋””์—, ์–ด๋–ค ์ด๋ฆ„์œผ๋กœ ์ €์žฅ๋ ์ง€๋ฅผ ์ •์˜ํ•œ๋‹ค.
    • path : path.resolve('./dist')๋ฅผ ์‚ฌ์šฉํ•ด ์ถœ๋ ฅ ๋””๋ ‰ํ† ๋ฆฌ์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•œ๋‹ค. ./dist๋Š” ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜์˜ dist ํด๋”๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ path.resolve๋Š” ์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
    • filename : '[name].js'๋Š” ์ง„์ž…์ ์˜ ์ด๋ฆ„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํŒŒ์ผ ์ด๋ฆ„์„ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•œ๋‹ค. entry์—์„œ ์ง„์ž…์ ์˜ ์ด๋ฆ„์„ main์œผ๋กœ ์„ค์ •ํ–ˆ์œผ๋ฏ€๋กœ ์ถœ๋ ฅ ํŒŒ์ผ์˜ ์ด๋ฆ„์€ main.js๊ฐ€ ๋œ๋‹ค.

 

์ด์ œ ์„ค์ • ๋œ webpack.config๋ฅผ ๋ฒˆ๋“ค๋ง ๋˜๋Š” ๊ณผ์ •์„ npm scripts์— ์ž‘์„ฑ์„ ํ•ด๋ณผ ๊ฒƒ์ด๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ์ˆ˜์ • ํ•˜๋ฉด ๋œ๋‹ค.

/* package.json */

"build": "webpack",

์ดํ›„์— build๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ž˜ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

::CMD

::npm
npm run build

::yarn
yarn run build

* ์ฐธ๊ณ ๋กœ  ์ด ์ฝ”๋“œ๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ๊ฐ„๋‹จํ•œ ์›นํŒฉ ์„ค์ •์„ ๊ตฌํ˜„ํ•œ ๊ฒƒ์œผ๋กœ ์†Œ์Šค ํŒŒ์ผ ./src/app.js๋ฅผ ์‹œ์ž‘์œผ๋กœ ์˜์กด์„ฑ์„ ํ•ด์„ํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ./dist/main.js๋กœ ์ถœ๋ ฅํ•œ๋‹ค. ์ด ์„ค์ •์€ ๋ฆฌ์•กํŠธ, ๋ทฐ, ์•ต๊ทค๋Ÿฌ ๋“ฑ์˜ ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ,๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ์˜ ์ดˆ๊ธฐ ๋‹จ๊ณ„์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค. ๋ฆฌ์•กํŠธ(๋ทฐ, ๋“ฑ)์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์›นํŒฉ ์„ค์ •์„ ์ˆ˜์ •ํ•  ํ•„์š”๋Š” ์—†๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ๋‹ค.  ์›นํŒฉ์„ ๋น„๋กฏํ•ด ๋ฐ”๋ฒจ๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋“ค์ด ์ด๋ฏธ ์„ค์ • ๋˜์–ด ์žˆ๋‹ค.


REF

728x90
Comments