splincodewd
@splincodewd
Developer

Как исправить проблемы с относительными путями в Webpack у sass-loader?

У меня проблема, когда в sass файлах есть стили с таким кодом:
app.scss
body {
 background: url(/img/test.png) no-repeat;
}


app.js
import './body.scss';
/*
.. js code
*/


То он ищет эту картинку относительно app.js, а мне не нужно этого, и хочется запретить
Нашел такое решение (ставить тильду):

app.scss
body {
 background: url(~/img/test.png) no-repeat;
}


Но тогда, проблема в другом.

Если у нас проект в корневом каталоге
и мы запускаем index.html так localhost:8080

Тогда все нормально

А если переместим проект в папку context и будем подключаться к нашему index.html так localhost:8080/context

Теперь проблема, дело в том, что webpack подставляет css стили такие:
body {
 background: url(img/test.png) no-repeat;
}


И браузер пишет ошибку, ибо пытается найти картинку по этому адресу localhost:8080/img/test.png
Хотя я загрузил страницу так localhost:8080/context

Вот конфиг вебпака:
module.exports = {

  context: __dirname, // точка входа в приложение

  entry: { // точки входа
    core: './angular/vendor.js',
    app: './angular/app.module.js'
  },

  output: { // выходные файлы
    path: '../webapp/js/',
    publicPath: '/js/',
    filename: '[name].js',
    library: '[name]'
  },

  module: {

    loaders: [
        { // используем ES6 to ES5
          test: /\.js$/,
          exclude: /(node_modules|bower_components)/,
          loader: 'babel', // 'babel-loader' is also a legal name to reference
          query: {
            presets: ['es2015'],
            compact : false
          }
        },
        {
            test: /\.html$/,
            loader: 'html'
          },
        {
          test: /\.css$/,
          loader: 'style-loader!css-loader'
        },
        {
          test: /\.scss$/,
          loaders: ['style', 'css', 'resolve-url', 'sass?sourceMap']
        }

        
    ]
  },

};
  • Вопрос задан
  • 986 просмотров
Пригласить эксперта
Ответы на вопрос 1
qtuz
@qtuz
На странице sass-loader рекомендуют использовать resolve-url-loader. Я использовал, отличное решение проблемы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы