webpackã®æ¬¡ã®ãã¼ã¸ã§ã³ã§å ¥ãassetModulesã®ç´¹ä»
ãã®æ©è½ãå°å
¥ããããã¨ã«ããã{raw/file/url}-loaderãä¸è¦ã¨ãªãã¾ãã
webpack@4ã§ã使ãã¾ãããã¾ã å®é¨çãã§ã¼ãºã§ãã
Documentation
PR
ã¢ã¸ã¥ã¼ã«ã¿ã¤ãã¨ä»¥åã¨ã®å¯¾å¿è¡¨
asset/resource
-> file-loaderasset/inline
-> url-loaderasset/source
-> raw-loaderasset
->asset/resource
ã¨asset/inline
ãèªå鏿ãã(é¾å¤: 8kb)
ä½¿ãæ¹
å®é¨ãã©ã°ããªã³ã«ããã
// webpack.config.js module.exports = { experiments: { asset: true }, };
ã¢ã»ãããåºåãã (file-loader)
å¥ãã£ã¬ã¯ããªã«ãã¡ã¤ã«ãåºåããã®ãã¡ã¤ã«ãã¹ãè¿ãã
output.assetModuleFilename
ã«åºåãã¡ã¤ã«åãæå®ãããã¨ãã§ããã
// webpack.config.js module.exports = { output: { assetModuleFilename: 'images/[hash][ext]', }, module: { rules: [ { test: /\.(png|jpg|gif)$/, type: 'asset/resource' } ] }, };
// src/index.js import foo from './images/foo.png'; console.log(foo); // /dist/images/151cfcfa1bd74779aadb.png img.src = foo;
ãã¼ã¿URIãåºåãã (url-loader)
Base64ã¢ã«ã´ãªãºã ã使ãåºåãããæååãè¿ãã(ã«ã¹ã¿ãã¤ãºå¯è½)
// webpack.config.js module.exports = { module: { rules: [ { test: /\.(png|jpg|gif|svg)$/, type: 'asset/inline' } ] }, };
// src/index.js import foo from './images/foo.svg'; console.log(foo); // data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDo...vc3ZnPgo= block.style.background = `url(${foo})`;
ã½ã¼ã¹ãåºåãã (raw-loader)
ã½ã¼ã¹ã³ã¼ãã®ä¸èº«ãè¿ãã
// webpack.config.js module.exports = { module: { rules: [ { test: /\.txt/, type: 'asset/source', } ] }, };
// src/index.js import foo from './foo.txt'; console.log(foo); // hello! block.textContent = foo;
èªåçã«é¸æããã
ãã¡ã¤ã«ã®å¤§ããã«ãããèªåçã«asset/resource
ãasset/inline
ã®å®è¡ã決å®ããã
8kb以ä¸ã®å ´åã¯ãinlineã¨ãªããã以ä¸ã¯resouceã¨ãªãã
é¾å¤ãå¤ãããå ´åã¯ãparser.dataUrlCondition.maxSize
ãæå®ãããã¨ãã§ããã
module.exports = { output: { assetModuleFilename: 'images/[hash][ext]', }, module: { rules: [ { test: /\.(png|jpg|gif)$/, type: 'asset', parser: { dataUrlCondition: { maxSize: 4 * 1024, // 4kb }, }, }, ], }, };