Webpack asset module - woowa-techcamp-2021/store-4 GitHub Wiki

webpack asset module

webpack v5 ์ด์ „์—๋Š” raw-loader, file-loader, url-loader๋“ค์„ ์ด์šฉํ•ด์„œ ํŒŒ์ผ๋“ค์„ ๊ฐ€์ ธ์™”๋Š”๋ฐ, v5๋ถ€ํ„ฐ๋Š” ๋‚ด์žฅ๋˜์–ด ์žˆ๋Š” asset๋ชจ๋“ˆ์— 4๊ฐ€์ง€ ์ƒˆ๋กœ์šด ๋ชจ๋“ˆ ์œ ํ˜•์ด ์ถ”๊ฐ€๋๋‹ค.

  • ๋ชจ๋“ˆ ์œ ํ˜•

    • asset/resource : ๋ณ„๋„์˜ ํŒŒ์ผ์„ ๋‚ด๋ณด๋‚ด๊ณ  URL์„ ์ถ”์ถœ(=file-loader)
    • asset/inline : ์—์…‹์˜ data URL๋ฅผ ๋‚ด๋ณด๋ƒ„(= url-lodaer)
    • asset/source : ์—์…‹์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋‚ด๋ณด๋ƒ„(= raw-loader)
    • asset : data-url๊ณผ ํŒŒ์ผ ๋‚ด๋ณด๋‚ด๊ธฐ ์ค‘์—์„œ ์ž๋™์œผ๋กœ ์„ ํƒ. ์ด์ „์—๋Š” ์• ์…‹ ํฌ๊ธฐ ์ œํ•œ์ด ์žˆ๋Š” url-loader๋ฅผ ์‚ฌ์šฉ
  • ํŒŒ์ผ ์ด๋ฆ„์€ ๊ธฐ๋ณธ์ ์œผ๋กœ [hash][text][query] ํŒŒ์ผ๋ช…์„ ์‚ฌ์šฉ, assetModuleFilename์œผ๋กœ ์ˆ˜์ • ๊ฐ€๋Šฅ

    module.exports = {
      entry: './src/index.js',
      output: {
        filename: 'main.js',
        path: path.resolve(__dirname, 'dist'),
       assetModuleFilename: 'images/[hash][ext][query]' // asset ํŒŒ์ผ ์ด๋ฆ„
      },
      module: {
        rules: [
          {
            test: /\.png/,
            type: 'asset/resource'
          }
        ]
      },
    };
  • asset ํƒ€์ž… ์‹œ resource, inline ์ค‘ ์„ ํƒ ์‚ฌ์ด์ฆˆ๋Š” 8kb ๋ฏธ๋งŒ์€ inline

    ์ตœ๋Œ€ ํฌ๊ธฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค

    module.exports = {
      entry: './src/index.js',
      output: {
        filename: 'main.js',
        path: path.resolve(__dirname, 'dist')
      },
      module: {
        rules: [
          {
            test: /\.txt/,
            type: 'asset',
            parser: {
             	dataUrlCondition: {
                maxSize: 4 * 1024 // 4kb
              }
            }
          }
        ]
      },
    };

Url-loader, file-loader ์ฐจ์ด

  • Data Url

    • Data url์€ HTML document์— ์ธ๋ผ์ธ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” URL scheme

    • ํŒŒ์ผ์€ ๋”ฐ๋กœ request๋ฅผ ๋ณด๋‚ด์ง€๋งŒ, url์€ ๋ณด๋‚ด์ง€ ์•Š๋Š”๋‹ค.

    • data:[<mediatype>][;base64],<data>
      
    • ํŒŒ์ด์–ดํญ์Šค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ธธ์ด ์ œํ•œ์ด ์—†๋Š” data URIs๋ฅผ ์ง€์›ํ•˜์ง€๋งŒ, ๋ธŒ๋ผ์šฐ์ €๋“ค์€ ๋ฐ์ดํ„ฐ์˜ ๊ฐœ๋ณ„์ ์ธ ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•  ์˜๋ฌด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์˜คํŽ˜๋ผ 11 ๋ธŒ๋ผ์šฐ์ €๋Š” data URL์„ 65529 ๋ฌธ์ž๋กœ ์ œํ•œํ•˜๋Š” 65535 ๊ฐœ์˜ character long์œผ๋กœ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค(MIME ํƒ€์ž…์„ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  plain data๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ์†Œ์Šค๊ฐ€ ์•„๋‹Œ ์ธ์ฝ”๋”ฉ๋œ ๋ฐ์ดํ„ฐ์˜ ๊ธธ์ด๋Š” 65529์ž๊ฐ€ ๋ฉ๋‹ˆ๋‹ค).

  • url-loader์€ ์—์…‹ ํŒŒ์ผ๋“ค์„ data url๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.

    • limit์œผ๋กœ ํฌ๊ธฐ๋ฅผ ์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.(์šฉ๋Ÿ‰์˜ ํฌ๊ธฐ๊ฐ€ ํฌ๋ฉด file-loader๋กœ ์ฒ˜๋ฆฌ)
  • file-loader๋Š” ์—์…‹๋“ค์„ ํŒŒ์ผ์— ๋Œ€ํ•œ Url์„ ์ฃผ์–ด์ง„๋‹ค

  • ์ด๋ฏธ์ง€๊ฐ€ ์ž‘์€ ๊ฒฝ์šฐ๋Š” url-loader๋ฅผ ์“ฐ๋ฉด ๋ถˆํ•„์š”ํ•œ ์š”์ฒญ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, data url์ด ์ถ”๊ฐ€๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฒˆ๋“ค์‚ฌ์ด์ฆˆ๊ฐ€ ์ปค์ง€๋Š” ๋‹จ์ ์ด ์žˆ๋Š”๋ฐ, ์ ์ ˆํ•˜๊ฒŒ ์ž˜ ์„ž์–ด์„œ ์‚ฌ์šฉํ•ด์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค.

์ฐธ๊ณ 

โš ๏ธ **GitHub.com Fallback** โš ๏ธ