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

์›นํŒฉ(Webpack)

by DevIseo 2023. 6. 15.

webpack

๐Ÿ’ก ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ชจ๋“ˆ์„ ์ง€์›ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ (ES5), ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ์ƒˆ๋กœ์šด ํ‘œ์ค€์ธ ECMAScript6(ES6)๊ฐ€ ์ƒ๊ธฐ๋ฉด์„œ ๋ชจ๋“ˆ์„ ์ง€์›.

  • CommonJS๋ณด๋‹ค ๋ฌธ๋ฒ•์ด ๋” ๊ฐ„๊ฒฐํ•ด์ง
  • ๊ตฌ์กฐ๊ฐ€ staticํ•˜๊ฒŒ ๋ถ„์„ ๊ฐ€๋Šฅํ•˜๊ณ  ์ตœ์ ํ™”๋„ ๋จ.
  • CommonJS๋ณด๋‹ค ์ˆœํ™˜ ์˜์กด์„ฑ ์ง€์›์ด ์ž˜๋จ

๊ทธ๋Ÿฌ๋‚˜ ๋ธŒ๋ผ์šฐ์ €๋Š” ์—ฌ์ „ํžˆ ํŒŒ์ผ ๋‹จ์œ„ ๋ชจ๋“ˆ์„ ์ž˜ ๋ชจ๋ฆ„.

  • ES6๋Š” ์ผ๋ถ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋งŒ ์ง€์›.
  • ๋”ฐ๋ผ์„œ ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋ธŒ๋ผ์šฐ์ €๋Š” ์ด๋Ÿฐ ๋ชจ๋“ˆํ™”๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Œ.
  • ํ•˜๋‚˜์˜ ์†Œ์Šค๋กœ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ณด์—ฌ์ฃผ๋Š”๊ฒŒ ์›น์˜ ํŠน์žฅ์ 
  • ๋ชจ๋“ˆ์„ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๋ฌถ์–ด ๋„คํŠธ์›Œํฌ ๋น„์šฉ์„ ์ตœ์†Œํ™” ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•จ
    • ์ด ๊ณผ์ •์ด ๋ฐ”๋กœ bundling </aside>

์›นํŽ™์˜ 4๊ฐ€์ง€ ๊ฐœ๋…

์—”ํŠธ๋ฆฌ

// webpack.config.js
module.exports = {
    entry: { 
				// ์‹œ์ž‘์  ๊ฒฝ๋กœ
        main: './src/main.js',
    }
}
  • ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„์˜ ์‹œ์ž‘์ ์„ ์˜๋ฏธ.
  • ์—”ํŠธ๋ฆฌ ํŒŒ์ผ์„ ์˜์กดํ•˜๋Š” ํŒŒ์ผ์€ ์—†์Œ
    • ์—”ํŠธ๋ฆฌ๊ฐ€ A๋ฅผ ์˜์กดํ•˜๊ณ , A๊ฐ€ ๋‹ค์‹œ B, C๋ฅผ ์˜์กดํ•˜๊ณ .. ํ•˜๋Š” ์‹์œผ๋กœ ๋ชจ๋“ˆ์ด ์—ฐ๊ฒฐ
  • ์›นํŒฉ์€ ์ด๋ฏธ์ง€, ํฐํŠธ, ์Šคํƒ€์ผ์‹œํŠธ ์—ญ์‹œ ๋ชจ๋“ˆ๋กœ ๊ด€๋ฆฌ
  • ์„ค์ •ํŒŒ์ผ์—์„œ ์—”ํŠธ๋ฆฌ ํŒŒ์ผ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

์•„์›ƒํ’‹

// webpack.config.js
module.exports = {
    output: {
        filename: 'bundle.js', 
        path: '.dist'
    }
}
  • ์—”ํŠธ๋ฆฌ์— ์„ค์ •ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์‹œ์ž‘์œผ๋กœ, ์˜์กด๋˜์–ด ์žˆ๋Š” ๋ชจ๋“ˆ์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์„œ ๋‚ด๋ณด๋‚ธ๋‹ค (๋ฒˆ๋“ค๋ง).
  • ๋ฒˆ๋“ค๋œ ๊ฒฐ๊ณผ๋ฌผ์ด ๋‚˜์˜ค๋Š” ์œ„์น˜๋Š” output ํ‚ค์— ๊ธฐ๋ก
//dist/buldnle.js -- ๋ฒˆ๋“ค๋ง๋œ ํŒŒ์ผ
<body>
    <script src="./dist/bundle.js"></script>
</body>

๋กœ๋”

  • ์›นํŒฉ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ ๋ฟ ์•„๋‹ˆ๋ผ ์ด๋ฏธ์ง€, ํฐํŠธ, ์Šคํƒ€์ผ์‹œํŠธ๊นŒ์ง€ ์ „๋ถ€ ๋ชจ๋“ˆ๋กœ ๊ด€๋ฆฌ
  • ์›นํŒฉ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฐ–์— ๋ชจ๋ฆ„
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์•„๋‹Œ ํŒŒ์ผ๋“ค์€ ์›นํŒฉ์ด ์ดํ•ดํ•˜๋„๋ก ๋ณ€๊ฒฝํ•ด์•ผํ•จ
    • ์ด ์—ญํ• ์„ ๋ฐ”๋กœ ๋กœ๋”๊ฐ€ ํ•ด์คŒ
  • ์˜ˆ์‹œ - css-loader
    • css๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ๋กœ๋”ฉํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋กœ๋”
    • test์— ๋กœ๋”ฉํ•  ํŒŒ์ผ์„ ์ง€์ •ํ•ด์ฃผ๊ณ , user์— ์‚ฌ์šฉํ•  ๋กœ๋”๋ฅผ ์ •ํ•ด์ฃผ๋ฉด ๋จ
    • //webpack.config.js module.exports = { module: { rules: [{ test: /\\.css$/, use: ['style-loader', 'css-loader'] }] } }

ํ”Œ๋Ÿฌ๊ทธ์ธ

  • ๋กœ๋”๋Š” (๋ฒˆ๋“ค๋˜๊ธฐ ์ „) ํŒŒ์ผ๋‹จ์œ„๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ˜๋ฉด, ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๋ฒˆ๋“ค๋œ ๊ฒฐ๊ณผ๋ฌผ์„ ์ถ”๊ฐ€๋กœ ์ฒ˜๋ฆฌ
  • ๋ฒˆ๋“ค๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‚œ๋…ํ™” ํ•œ๋‹ค๊ฑฐ๋‚˜ ํŠน์ • ํ…์ŠคํŠธ๋ฅผ ์ถ”์ถœํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • ์˜ˆ์‹œ - UglifyJsPlugin
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฒฐ๊ณผ๋ฌผ์„ ๋‚œ๋…ํ™” ์ฒ˜๋ฆฌํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ
    • ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์›นํŒฉ ๊ฐ์ฒด์˜ plugins ๋ฐฐ์—ด์— ์ถ”๊ฐ€

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

๋ฐ”๋ฒจ(Babel)  (0) 2023.06.15
[axios] axios 2  (0) 2023.01.27
[axios] axios 1  (0) 2023.01.21
[npm].npmrc  (0) 2023.01.19

๋Œ“๊ธ€