mirror of
https://github.com/elyby/emails-renderer.git
synced 2024-12-24 14:19:45 +05:30
37 lines
1.4 KiB
JavaScript
37 lines
1.4 KiB
JavaScript
|
// при использовании 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}
|
|||
|
`) + urlPostfix(url)
|
|||
|
)
|
|||
|
) : resolve(url)
|
|||
|
)
|
|||
|
});
|
|||
|
};
|