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

๋ชฉ๋กโš›๏ธReact/๐Ÿ”งFront-Dev-Environment (13)

C-log

๐Ÿ”งWebpack : Babel

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Babel์— ๊ด€ํ•ด์„œ ๋‹ค๋ฃจ์–ด ๋ณผ ๊ฒƒ์ด๋‹ค. Babel์€ ๋ฌด์—‡์ด๊ณ  Babel์ด ์–ด๋–ป๊ฒŒ ํƒ„์ƒ์ด ๋˜์—ˆ๋Š”์ง€ ์•Œ์•„ ๋ณผ ๊ฒƒ์ด๋‹ค. ์šฐ์„  Babel์ด๋ผ๋Š” ์–ด์›์€ ๊ณ ๋Œ€ ํžˆ๋ธŒ๋ฆฌ ์‹ ํ™”์—์„œ ๋‹ค๋ฃจ๊ณ  ์žˆ๋Š” Babelํƒ‘ ์ด์•ผ๊ธฐ์˜ Babel๋กœ ๋ถ€ํ„ฐ ๊ฐ€์ง€๊ณ  ์˜จ ๊ฒƒ์ด๋‹ค. ์ด์•ผ๊ธฐ์˜ ๊ฐ„๋‹จํ•œ ๋‚ด์šฉ์„ ์ด๋ ‡๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ํ•˜๋Š˜ ๋†’์ด ์˜ฌ๋ผ๊ฐ€๊ธฐ ์œ„ํ•œ ํƒ‘์„ ์Œ“์•„ ์˜ฌ๋ ธ๋Š”๋ฐ ์‹ ์ด ์ด๊ฒƒ์„ ๋ง‰๊ธฐ์œ„ํ•ด ์ธ๊ฐ„๋“ค์˜ ์–ธ์–ด๋ฅผ ๋ชจ๋‘ ๋ฐ”๊ฟ” ๋†“๊ฒŒ ๋˜๋Š” ์ด์•ผ๊ธฐ๋‹ค. ์ง€๊ธˆ ์†Œํ”„ํŠธ์›จ์–ด, ๋ธŒ๋ผ์šฐ์ €์˜ ์ƒํƒœ๊ณ„๋ฅผ ๋ณด๋ฉด ์œˆ๋„์šฐ, ๋ฆฌ๋ˆ…์Šค, ๋งฅ, ํฌ๋กฌ, ์—ฃ์ง€, ์‚ฌํŒŒ๋ฆฌ, ์›จ์ผ ๋“ฑ ๋‹ค์–‘ํ•œ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์กด์žฌํ•˜๊ณ  ์ด๊ฒƒ๋“ค์ด ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์–ธ์–ด๊ฐ€ ๊ฐ๊ธฐ ๋‹ค๋ฅด๋‹ค. ๊ณผ๊ฑฐ ์‚ฌํŒŒ๋ฆฌ์—์„œ๋Š” Promise.prototype.finaly ๋ฉ”์†Œ๋“œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์—ˆ๋‹ค. ๊ทธ์•ผ ๋ง๋กœ ํ˜ผ๋ˆ์˜ ์‹œ๋Œ€์ด๋‹ค. ์ฐธ๊ณ ..

๐Ÿ”งWebpack : url-loader

url-loader์˜ ์—ญํ• ์€ ์ด๋ฏธ์ง€๋ฅผ base-64๋กœ ์ธ์ฝ”๋”ฉํ•ด์„œ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ์ด๋ฏธ์ง€ ์†Œ์Šค์— ๋„ฃ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ฒ˜๋ฆฌ๋ฅผ url-loader๊ฐ€ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค€๋‹ค. ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฏธ์ง€๊ฐ€ ๋งŽ์•„์งˆ ๋•Œ ๋„คํŠธ์›Œํฌ์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋‹ด์ด ์žˆ๊ณ  ์„œ๋น„์Šค ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๊ธฐ ๋–„๋ฌธ์ด๋‹ค. ์ฐธ๊ณ ๋กœ ์ž‘์€ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด Data URI Scheme์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚ซ๋‹ค.file-loader : 2  ํ˜„์žฌ ์ž‘์„ฑ์ž‘์˜ webpack ํ™˜๊ฒฝ์€ ์•Œ๋‹ค์‹œํ”ผ webpack 5์ด๋‹ค. ์ด์— ๋”ฐ๋ผ file-loader๋‚˜ url-loader๋Š” ์ด๋ฏธ assets/resource์— ๋‚ด์žฅ์ด ๋˜์–ด ์žˆ์–ด์„œ ์ˆ˜์—…์—์„œ ์ฒ˜๋Ÿผ ๋”ฐ๋กœ ์„ค์ • ํ•  ํ•„์š”๋Š” ์—†๋‹ค. ๋‹ค๋งŒ webpack.config์— ์ง€๋‚œ๋ฒˆ๊ณผ ๊ฐ™์€ ํ˜•์‹๊ณผ ํ˜•ํƒœ๋ฅผ ์œ ์ง€ํ•˜์ง€๋งŒ png๋ฅผ ์ œ..

๐Ÿ”งWebpack : file-loader

์šฐ์„  ์ด๋ฏธ์ง€๋ฅผ importํ•˜๊ธฐ ์œ„ํ•ด์„œ ์•„๋ž˜์™€ ๊ฐ™์ด css๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผํ•œ๋‹ค.body { background-image: url(git-logo-icon.png);}  ์šฐ์„  yarn์˜ pnp๋กœ ๋™์ž‘์„ ์„ค์ •ํ•œ ๋‚˜์˜ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์—์„  ์˜ค๋ฅ˜๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  ์ •์ƒ์ ์œผ๋กœ ๋นŒ๋“œ๊ฐ€ ๋˜์—ˆ๋‹ค๊ณ  ๋‚˜์˜ค๊ณ  ์žˆ๋‹ค. ๊ฑฐ๊ธฐ๋‹ค ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ๋‚ด๊ฐ€ ์„ค์ •ํ•œ image๊ฐ€ ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜๊ณ  ์žˆ๋‹ค. ์™œ๊ทธ๋Ÿฐ๊ฐ€ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ๋‚ด๊ฐ€ ์ด๋ฏธ node_modules๋ฅผ pnp๋กœ ์ „ํ™˜ํ•ด์„œ yarn-berry์˜ ํŠน์ง•์ธ cache ํด๋”์•ˆ์—์„œ ์ด๋ฏธ file-loader๊ฐ€ ์กด์žฌํ•ด์„œ ํ•ด๊ฒฐ์ด ๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ง์ž‘์„ ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚˜์˜ ์ถ”์ธก๊ณผ๋Š” ์ „ํ˜€ ๋ฌด๊ด€ํ–ˆ๋‹ค. file-loader๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ๋ฐ”๋กœ webpack.configํŒŒ์ผ์„ ์„ค์ •ํ•˜๋‹ˆ ๊ทธ์ œ์„œ์•ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์ด๋‹ค. ๋”ฐ..

๐Ÿ”งWebpack : Loader

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋กœ๋”์— ๊ด€ํ•ด์„œ ๋‹ค๋ฃฐ ๊ฒƒ์ด๋‹ค. ์›นํŒฉ์€ ๋ชจ๋“  ํŒŒ์ผ๋“ค์„ ๋ชจ๋“ˆ๋กœ ๋ฐ”๋ผ๋ณธ๋‹ค. ๋”ฐ๋ผ์„œ import ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ ์•ˆ์œผ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, import ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋กค ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š” ๋ฐ”๋กœ ๋กœ๋” ๋•Œ๋ฌธ์ด๋‹ค. ๋กœ๋”๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์–ธ์–ด๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์œผ๋กœ ๋ณ€ํ™˜ํ•ด ์ฃผ๊ฑฐ๋‚˜ ์ด๋ฏธ์ง€๋ฅผ data URL ํ˜•์‹์˜ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. ๋ฟ๋งŒ์•„๋‹ˆ๋ผ CSS ํŒŒ์ผ์„ ์ž๋ฐ”์Šคํฌ๋ฆฝ์—์„œ ์ง์ ‘ ๋กœ๋”ฉํ•  ์ˆ˜  ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.๋กœ๋”์˜ ๋™์ž‘ ์›๋ฆฌ์šฐ์„  ์•„๋ž˜์™€ ๊ฐ™์ด ๋กœ๋”๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” js ํ•จ์ˆ˜ํ˜• ํŒŒ์ผ์„ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.// my-webpack-loader.jsmodule.exports = function myWebpackLoader(content) { console.log('..