2016-07-23 02:28:31 +05:30
|
|
|
|
// при использовании sass-loader теряется контекст в импортированных модулях
|
|
|
|
|
// из-за чего css-loader не может правильно обработать относительные url
|
|
|
|
|
//
|
|
|
|
|
// препроцессим урлы перед тем, как пропускать их через sass-loader
|
|
|
|
|
// урлы, начинающиеся с / будут оставлены как есть
|
|
|
|
|
|
|
|
|
|
const cssUrl = require('postcss-url');
|
|
|
|
|
const loaderUtils = require('loader-utils');
|
|
|
|
|
|
|
|
|
|
// /#.+$/ - strip #hash part of svg font url
|
|
|
|
|
const urlToRequest = (url) => loaderUtils.urlToRequest(url.replace(/\??#.+$/, ''), true);
|
|
|
|
|
const urlPostfix = (url) => {
|
|
|
|
|
var idx = url.indexOf('?#');
|
|
|
|
|
|
|
|
|
|
if (idx < 0) {
|
|
|
|
|
idx = url.indexOf('#');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return idx >= 0 ? url.slice(idx) : '';
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
module.exports = function(loader) {
|
|
|
|
|
return cssUrl({
|
|
|
|
|
url: (url, decl, from, dirname, to, options, result) =>
|
|
|
|
|
new Promise((resolve, reject) =>
|
|
|
|
|
loaderUtils.isUrlRequest(url) ? loader.loadModule(urlToRequest(url), (err, source) =>
|
|
|
|
|
err ? reject(err) : resolve(
|
|
|
|
|
loader.exec(`
|
|
|
|
|
var __webpack_public_path__ = '${loader.options.output.publicPath}';
|
|
|
|
|
${source}
|
2016-11-12 14:33:44 +05:30
|
|
|
|
`, dirname) + urlPostfix(url)
|
2016-07-23 02:28:31 +05:30
|
|
|
|
)
|
|
|
|
|
) : resolve(url)
|
|
|
|
|
)
|
|
|
|
|
});
|
|
|
|
|
};
|