所以我目前使用BundleTransformer
,LESS
,我试图添加Autoprefixer
后期处理器。此插件会自动获取transform: scale(1.5)
之类的CSS,并将其转换为-webkit-transform
和-moz-transform
。
如果我处于发布模式或BundleTable.EnableOptimizations=true
,那么一切正常,前缀会按预期添加。
但是在调试模式下,我的包中的所有单个CSS / LESS文件都作为单独的请求存在于HTML中。我在我的CSHTML文件中使用此命令:
@Styles.Render("~/Content/css/lessbundle")
即。在调试模式下,这会扩展到LINK
标签:
/cs/something.css
/css/lessfile1.less
/css/lessfile1.less
而不是单个文件
/Content/css/lessbundle?v=RFAUSIwb-jEuuo4vHNTnTkE2LrN2jfHglX-Hk8HIF481
对于LESS文件,IIS会自动转换它们,但它不会应用Autoprefixer
。
在请求原始.css
和.less
文件时,有没有办法让Autoprefixer工作?
如果不是,那对我来说似乎毫无意义,因为我看到的唯一选择是直接请求'Content/css/lessbundle
虚拟网址 - 它将通过Autoprefixer
运行。它只会在发布版本中缩小。
答案 0 :(得分:8)
在文档(部分:“Examples of usage”,“Debugging HTTP-handlers”和“Postprocessors”)中介绍了如何解决此问题。我将列出基本步骤:
为了调试HTTP处理程序以使用bundle中的配置设置,需要在RegisterBundles
文件的App_Start/BundleConfig.cs
方法中添加以下代码:
BundleResolver.Current = new CustomBundleResolver();
为了将这些设置应用于CSS-和JS-assets,需要在Web.config文件中注册调试HTTP处理程序CssAssetHandler
和JsAssetHandler
。要在IIS集成模式下执行此操作,需要在/configuration/system.webServer/handlers
元素中添加以下代码:
< add name =" CssAssetHandler" 路径=" *。CSS"动词=" GET" type =" BundleTransformer.Core.HttpHandlers.CssAssetHandler,BundleTransformer.Core" = resourceType为"文件"前提="" />
< add name =" JsAssetHandler" 路径=" * JS"动词=" GET" type =" BundleTransformer.Core.HttpHandlers.JsAssetHandler,BundleTransformer.Core" = resourceType为"文件"前提="" />
要使AutoprefixCssPostProcessor
是默认的CSS后处理器之一,您需要更改Web.config
文件。在defaultPostProcessors
元素的\configuration\bundleTransformer\core\css
属性中,必须将AutoprefixCssPostProcessor
添加到逗号分隔列表的末尾(例如,defaultPostProcessors="UrlRewritingCssPostProcessor,AutoprefixCssPostProcessor"
)。
答案 1 :(得分:0)
除了@Taritsyn所说的你需要确保你的捆绑包
CustomScriptBundle()
而非ScriptBundle()
如果不是,您将收到稍有混淆的错误消息:
无法在'〜/ Content / css / myCssBundle'包中找到变压器。
我发现有趣地深入了解这实际上是如何运作的
使用附加参数?bundleVirtualPath
/Content/css/defenderrazor_DEBUG.less?
bundleVirtualPath=~%2fContent%2fcss%2fmyCssBundle
当请求.less文件时,web.config
中的处理程序拦截了这个,然后处理程序可以使用该包名来查找您设置的任何转换 - 包括在这种情况下AutoprefixCss
的默认发布处理器。