У меня была такая же проблема.
1.Различать SVG-шрифты и изображения
Вы можете использовать опцию outputPath загрузчика файлов, чтобы различать шрифты и изображения следующим образом:
{
test: /.*\.(gif|png|jpe?g|svg)$/,
loader: "file-loader",
options: {
name: "[name].[ext]",
outputPath: (url, resourcePath, context) => {
const relativePath = path.relative(context, resourcePath);
// ignore SVG file if its relative path contains "fonts" (in your case "assets")
if (/\/fonts\//.test(relativePath)) {
return;
}
return `images/${url}`;
},
},
},
{
test: /.*\.(ttf|eot|woff|woff2|svg)$/,
loader: "file-loader",
options: {
name: "[name].[ext]",
outputPath: (url, resourcePath, context) => {
const relativePath = path.relative(context, resourcePath);
// ignore SVG file if its relative path contains "images"
if (/\/images\//.test(relativePath)) {
return;
}
return `fonts/${url}`;
},
},
},
... но есть еще другая проблема:
2.Неработающий контент SVG
Кажется, что работают только SVG из последнего раздела.Если я сначала запустил шрифты и после этого изображения, только изображения будут построены правильно - и наоборот.Обходным решением будет добавить новый раздел для всех SVG и удалить их из раздела шрифтов и изображений.
{
test: /.*\.(gif|png|jpe?g)$/,
loader: "file-loader",
options: {
name: "images/[name].[ext]",
},
},
{
test: /.*\.(ttf|eot|woff|woff2)$/,
loader: "file-loader",
options: {
name: "fonts/[name].[ext]",
},
},
{
test: /\.svg$/,
loader: "file-loader",
options: {
name: "[name].[ext]",
outputPath: (url, resourcePath, context) => {
const relativePath = path.relative(context, resourcePath);
if (/\/images\//.test(relativePath)) {
// return target for svg images
return `images/${url}`;
} else if (/\/fonts\//.test(relativePath)) {
// return target for svg fonts
return `fonts/${url}`;
}
return `other/${url}`;
},
},
},