Как правильно использовать IItemTransform для исправления путей в CSS-связке с помощью ASP.NET Web Optimization и BundleTransformer?
В настоящее время я работаю над проектом, который использует библиотеку ASP.NET Web Optimization (v 1.1.0-Beta1) в сочетании с расширением Bundle Transformer (v 1.7.3-Beta1 для ядра, 1.7.0-Beta1 для LESS) который используется для преобразования LESS в CSS. Основываясь на поиске в Интернете, пути в CSS (и меньше) кажутся распространенной проблемой, в большинстве случаев рекомендуется вручную изменить CSS и покончить с этим. Однако из-за различий между нашей средой разработки и производственной средой, а также из-за отсутствия уязвимого CSS такое решение неосуществимо.
Два решения, кажется, существуют. Первый заключается в наложении виртуального каталога, как определено связыванием, на фактический каталог, содержащий содержимое. Мне это кажется плохим вариантом.
Во-вторых, и маршрут, который я выбрал, это использовать IItemTransform
такие как CssRewriteUrlTransform
(упомянуто в этом сообщении. Даже у этого решения есть свои ограничения. Поэтому я попытался написать свой ItemTransformer
но кажется, что результаты его выполнения игнорируются при использовании следующим образом:
public static void RegisterBundles(BundleCollection bundles)
{
/* among other work pass in IItemTransformer to fix paths */
var styleBundle = new StyleBundle("~/bundles/css/styles")
.Include(...)
.Include("~/Content/less/font-awesome.less", new RewriteUrlTransform())
.Include(...);
styleBundle.Transforms.Add(new CssTransformer());
styleBundle.Orderer = new NullOrderer();
bundles.Add(styleBundle);
}
Реализация IItemTransform:
public class RewriteUrlTransform : IItemTransform
{
public string Process(string includedVirtualPath, string input)
{
return (input manipulated with proper path replacing bad path)
}
}
Если я не совсем неправильно понимаю, как IItemTransform
должен быть использован, что вполне возможно из-за отсутствия документации, я думаю, что возвращение метода Process - это новый постобработанный CSS. Однако возвращение, похоже, игнорируется. Исходный ввод всегда используется, даже когда я возвращаю String.Empty()
, Я что-то здесь не так делаю или это действительно ошибка?
2 ответа
Нет, вы понимаете это правильно, преобразования элемента применяются к элементу, прежде чем они будут объединены вместе, и затем выполняются преобразования пакета. Вы убедились, что он вызывает ваше преобразование, когда вы ожидаете в отладчике?
Bundle Transformer изначально поддерживает автоматическое преобразование относительных путей в абсолютные в CSS-коде. Я говорю вам, как разработчик этого продукта.