Webpack asset module - woowa-techcamp-2021/store-4 GitHub Wiki
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 } } } ] }, };
-
Data Url
-
Data url์ HTML document์ ์ธ๋ผ์ธ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ ์ ์๋ URL scheme
-
ํ์ผ์ ๋ฐ๋ก request๋ฅผ ๋ณด๋ด์ง๋ง, url์ ๋ณด๋ด์ง ์๋๋ค.
-
data:[<mediatype>][;base64],<data>
-
ํ์ด์ดํญ์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ธธ์ด ์ ํ์ด ์๋
data
URIs๋ฅผ ์ง์ํ์ง๋ง, ๋ธ๋ผ์ฐ์ ๋ค์ ๋ฐ์ดํฐ์ ๊ฐ๋ณ์ ์ธ ์ต๋ ๊ธธ์ด๋ฅผ ์ ๊ณตํด์ผ ํ ์๋ฌด๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์คํ๋ผ 11 ๋ธ๋ผ์ฐ์ ๋data
URL์ 65529 ๋ฌธ์๋ก ์ ํํ๋ 65535 ๊ฐ์ character long์ผ๋ก ์ ํํฉ๋๋ค(MIME ํ์ ์ ์ง์ ํ์ง ์๊ณ plaindata
๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, ์์ค๊ฐ ์๋ ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํฐ์ ๊ธธ์ด๋ 65529์๊ฐ ๋ฉ๋๋ค).
-
-
url-loader์ ์์ ํ์ผ๋ค์ data url๋ก ๋ฐ๊ฟ์ค๋ค.
- limit์ผ๋ก ํฌ๊ธฐ๋ฅผ ์ ํด์ค ์ ์๋ค.(์ฉ๋์ ํฌ๊ธฐ๊ฐ ํฌ๋ฉด file-loader๋ก ์ฒ๋ฆฌ)
-
file-loader๋ ์์ ๋ค์ ํ์ผ์ ๋ํ Url์ ์ฃผ์ด์ง๋ค
-
์ด๋ฏธ์ง๊ฐ ์์ ๊ฒฝ์ฐ๋ url-loader๋ฅผ ์ฐ๋ฉด ๋ถํ์ํ ์์ฒญ์ ์ค์ผ ์ ์๋ค. ํ์ง๋ง, data url์ด ์ถ๊ฐ๋๊ธฐ ๋๋ฌธ์ ๋ฒ๋ค์ฌ์ด์ฆ๊ฐ ์ปค์ง๋ ๋จ์ ์ด ์๋๋ฐ, ์ ์ ํ๊ฒ ์ ์์ด์ ์ฌ์ฉํด์ผํ ๊ฒ ๊ฐ๋ค.