Попытка загрузить CSS фоновое изображение, определенное в S CSS, и передать через WebPack devServer.
Фоновое изображение, определенное в S CSS, выбирается WebPack, но это не не отображается на странице.
Я попытался установить параметр publicPath
в MiniCssExtractPlugin.loader
и просмотрел все ответы, которые я смог найти, связанные с этой проблемой, но не смог заставить это работать .
Обновление : также попытался установить параметр publicPath
в file-loader
. Согласно документации это значение по умолчанию выводится как publicPath, который в моем случае одинаков.
Update : при использовании абсолютного пути в S CSS он компилируется в CSS как этот точный путь, но он не будет работать как локальный dev, staging и prod имеют разные пути.
Соответствующая часть вывода при запуске webpack-dev-server
:
Child mini-css-extract-plugin node_modules/css-loader/index.js??ref--5-1!node_modules/sass-loader/dist/cjs.js??ref--5-2!index.scss:
Asset Size Chunks Chunk Names
pages/index/404@2x.png 29.2 KiB [emitted]
index.s css:
body {
background: url("./pages/index/404@2x.png");
}
CSS вывод:
body {
background: url([object Module]);
}
Моя конфигурация WebPack:
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const path = require('path');
const outputDir = 'dist/website';
const publicPath = '/web/website/';
module.exports = {
mode: 'development',
devtool: 'source-map',
entry: './index.ts',
output: {
path: path.resolve(__dirname, outputDir),
publicPath: publicPath,
filename: 'bundle.js',
},
resolve: {
extensions: ['.ts', '.js'],
},
module: {
rules: [
{
test: /\.ts$/,
use: ['ts-loader'],
},
{
test: /\.scss$/,
use: [
{
loader: MiniCssExtractPlugin.loader,
},
{
loader: 'css-loader',
options: {
sourcemap: true,
},
},
{
loader: 'sass-loader',
options: {
sourceMap: true,
},
},
],
},
{
test: /\.(png|jpe?g|gif|svg|webp)$/i,
use: [
{
loader: 'file-loader',
options: {
name: '[path][name].[ext]',
},
},
],
},
],
},
plugins: [
new MiniCssExtractPlugin({
path: path.resolve(__dirname, outputDir),
filename: '[name].css',
chunkFilename: '[id].css',
}),
new CleanWebpackPlugin([outputDir]),
],
devServer: {
contentBase: path.join(__dirname, outputDir),
publicPath: publicPath,
port: 9009,
proxy: {
'/': 'http://127.0.0.1:5000/',
},
},
};
index.ts:
import './index.scss';
console.log('WebPack is working!');