webpackのcss-loaderのバージョンを5.xから6.xに変えました。
それに伴いcss内の画像指定が期待した通り変換されなくなったのでwebpackの設定ファイルを変えることで対応しました。
具体的にはwebpackの設定のrulesにasset/resourceを追加する作業です。
この設定によりcss-loaderがcssファイル内で参照している画像を置き換えてくれます。
module.exports = [
{
module: {
rules: [
{
test: /\.scss$/,
use: [
{
loader: MiniCssExtractPlugin.loader
},
{
loader: "css-loader",
options: {
url: true,
importLoaders: 2,
}
},
"sass-loader"
]
},
{
test: /\.(jpg|jpeg|png|svg|gif|ico)$/,
type: "asset/resource",
}
],
},
plugins: [
new MiniCssExtractPlugin({}),
],
resolve: {
extensions: ['.js', '.jsx', '.ts', '.tsx'],
},
stats: 'errors-only',
}
];
asset/resourceをasset/inlineにすると、画像のパスをData URIに置き換えてCSSに画像データを埋め込んでくれます。
ファイルのサイズが小さい場合はこちらでも良いかもしれません。