1 Не извлекать файлы css в отдельный каталог файлов
Внутри тега стиля компонента vue есть следующий код css, который использует фоновое изображение.
background-image: url("../assets/img/icon_add.png");
Конфигурация разбора css-загрузчика в webpack выглядит следующим образом
{
test: /\.(css|less)$/,
exclude: path.resolve(__dirname, 'node_modules'),
use: ['style-loader', 'css-loader', 'less-loader']
}
После упаковки в каталоге dist нет файла css. Это связано с тем, что файлы css преобразуются в файлы js.
В это время запустите проект, фоновое изображение вводится правильно и может нормально отображаться.2 Извлеките файлы css в отдельный каталог файлов.
Используйте mini-css-extract-plugin для извлечения файлов css отдельно в каталог css в каталоге dist.
2.1 конфигурация загрузчика
{
test: /\.(css|less)$/,
exclude: path.resolve(__dirname, 'node_modules'),
use: [MiniCssExtractPlugin.loader, 'css-loader', 'less-loader']
}
2.2 конфигурация плагина
new MiniCssExtractPlugin({
filename: 'css/[name][contenthash].css',
})
После упаковки структура каталогов dist выглядит следующим образом:
Вы можете видеть, что изображение находится в корневом каталоге (dist) в это время, но файл css находится в каталоге dist/css/. Теперь давайте посмотрим, как упакованный файл css ссылается на путь к изображению.2.3 Результаты упаковки
background-image: url(bb65a86a2fe7669e483a56b970bea421.png);
Вы видите, что в каталоге dist/css нет изображения bb65a86a2fe7669e483a56b970bea421.png. Поэтому изображение не может отображаться должным образом. в идеале
background-image: url(../bb65a86a2fe7669e483a56b970bea421.png);
3 решения
Измените конфигурацию загрузчика следующим образом
{
loader: MiniCssExtractPlugin.loader,
options: {
// 当前的css所在的文件相对于打包后的根路径dist的相对路径
publicPath: '../'
}
}, 'css-loader', 'less-loader'
Суммировать
Разделение файла css приводит к неправильному пути к фоновому изображению css. Суть решения заключается в настройке значения publicPath. Значение publicPath — это значение относительного пути каталога файлов, в котором находится файл css, относительно корневая директория. Например, корневой путь — /, а каталог, в котором находится файл css, — /css/, поэтому относительный путь — ..
неожиданная проблема
Почему пакет WebPack, файл CSS смешивается с файлом bundle.js, но изображение не смешивается с пакетом.js? ? ?