Здравствуйте. Есть следующий конфиг вебпака. Проблема заключается в том, что если я использую какие-то файлы в css/scss, например картинки в background-image/шрифты в font-face, то в папке dist вебпак создает копии файлов с хешем в корневой папке, а не обращается в скопированную папку assets с этими же файлами. В чем может быть причина?
const path = require("path");
const HTMLWebpackPlugin = require("html-webpack-plugin");
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
const CopyWebpackPlugin = require("copy-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const OptimizeCssAssetWebpackPlugin = require("optimize-css-assets-webpack-plugin");
const TerserWebpackPlugin = require("terser-webpack-plugin");
const { BundleAnalyzerPlugin } = require("webpack-bundle-analyzer");
const isDev = process.env.NODE_ENV === "development";
const isProd = !isDev;
const optimization = () => {
const config = {
splitChunks: {
chunks: "all",
},
};
if (isProd) {
config.minimizer = [new OptimizeCssAssetWebpackPlugin(), new TerserWebpackPlugin()];
}
return config;
};
const cssLoaders = (extra) => {
const loaders = [
{
loader: MiniCssExtractPlugin.loader,
},
"css-loader",
];
if (extra) {
loaders.push(extra);
}
return loaders;
};
const plugins = () => {
const base = [
new HTMLWebpackPlugin({
template: "./index.html",
}),
new CleanWebpackPlugin(),
new CopyWebpackPlugin({
patterns: [
{
from: path.resolve(__dirname, "src/assets/"),
to: path.resolve(__dirname, "dist/assets/"),
},
],
}),
new MiniCssExtractPlugin({
filename: "./styles/[name].[contenthash].css",
}),
];
if (isProd) {
base.push(new BundleAnalyzerPlugin());
}
return base;
};
module.exports = {
context: path.resolve(__dirname, "src"),
mode: "development",
entry: ["@babel/polyfill", "./js/index.js"],
output: {
filename: "./js/[name].[contenthash].js",
path: path.resolve(__dirname, "dist"),
},
resolve: {
/* список расширений при импорте */
// extensions: [""],
/* упрощение вложенности. В import ./ меняется на @ */
alias: {
"@js": path.resolve(__dirname, "src/js/"),
"@": path.resolve(__dirname, "src"),
},
},
optimization: optimization(),
devServer: {
port: 5500,
open: true,
hot: isDev,
},
devtool: isDev ? "source-map" : false,
plugins: plugins(),
module: {
rules: [
{
test: /\.css$/,
use: cssLoaders(),
},
{
test: /\.scss$/,
use: cssLoaders("sass-loader"),
},
{ test: /\.(png|jpg|svg|jpeg)$/, use: ["file-loader"] },
{ test: /\.(ttf|woff|woff2)$/, use: ["file-loader"] },
{
test: /\.m?js$/,
exclude: /node_modules/,
use: {
loader: "babel-loader",
options: {
presets: ["@babel/preset-env"],
},
},
},
],
},
};