
webpackの次のバージョンで入るassetModulesの紹介
目次
この機能が導入されることにより、{raw/file/url}-loader
が不要となります。
webpack@4 でも使えますが、まだ実験的フェーズです。
Documentation
Asset Modules | webpack
webpack is a module bundler. Its main purpose is to bundle JavaScript files for usage in a browser, yet it is also capable of transforming, bundling, or packaging just about any resource or asset.

PR
add experimental asset support by hiroppy · Pull Request #8983 · webpack/webpack
module.exports = { output: { assetModuleFilename: "images/[hash][ext]" }, module: { rules: [ { test: /\.(png|jpg|svg)$/, type: "asset/resource&quo...
モジュールタイプと以前との対応表
asset/resource
-> file-loaderasset/inline
-> url-loaderasset/source
-> raw-loaderasset
->asset/resource
とasset/inline
を自動選択する(閾値: 8kb)
使い方
実験フラグをオンにする。
module.exports = { experiments: { asset: true, },};
アセットを出力する (file-loader)
別ディレクトリにファイルを出力しそのファイルパスを返す。
output.assetModuleFilename
に出力ファイル名を指定することができる。
module.exports = { output: { assetModuleFilename: "images/[hash][ext]", }, module: { rules: [ { test: /\.(png|jpg|gif)$/, type: "asset/resource", }, ], },};
console.log(foo);img.src = foo;
データ URI を出力する (url-loader)
Base64 アルゴリズムを使い出力される文字列を返す。(カスタマイズ可能)
module.exports = { module: { rules: [ { test: /\.(png|jpg|gif|svg)$/, type: "asset/inline", }, ], },};
console.log(foo);// data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDo...vc3ZnPgo=
block.style.background = `url(${foo})`;
ソースを出力する (raw-loader)
ソースコードの中身を返す。
module.exports = { module: { rules: [ { test: /\.txt/, type: "asset/source", }, ], },};
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 }, }, }, ], },};