IItemTransform和现有的缩小文件

时间:2014-03-04 18:30:33

标签: asp.net css transformation bundling-and-minification system.web.optimization

TL; DR :当缩小文件与原始(非缩小)文件位于同一文件夹中时,IItemTransform未执行。

问题解释

我遇到这个问题主要是因为CSS相对图像引用。如果您将IItemTransform与Javascript文件一起使用,则同样适用。

这就是我正在使用的:

  1. 我正在使用带有Web Essentials插件的Visual Studio来支持LESS文件
  2. 我正在编写LESS文件并让Web Essentials插件自动缩小保存文件
  3. 我也在项目中使用捆绑和缩小
  4. 创建CSS包时,我正在使用CssRewriteUrlTransform使CSS URL绝对(即背景图像),以便在将多个CSS文件捆绑在一起后图像仍然可用
  5. 到目前为止,这里没什么不寻常的,但它不起作用。

    似乎是什么问题?

    捆绑和缩小的工作方式是它试图避免过度处理。这意味着当缩小文件与原始文件存在于同一文件夹中时,它将不会运行自己的缩小,而是提供现有文件。

    只要它至少会对那些预先存在的缩小文件进行转换,这样就可以了。但事实并非如此。所以我最终得到了一个包中的相对URL,这些URL几乎打破了所有这些资源。

    变通方法

    1. 始终在LESS文件中提供绝对路径
    2. 在Web Essentials设置中保存时禁用文件缩小
    3. 在定义我的软件包时请参阅缩小的文件,因为它们没有缩小的版本(* .min.css没有* .min.min.css)所以minifier实际上选择了上传文件并缩小,同时也对其进行转换。
    4. 从我的开发过程和使用的工具(并按照它们的方式配置)的角度来看,这看起来像一个bug。如果这些文件是同一缩小过程的结果,那么这根本就不是一个错误,因为在缩小执行时将执行转换。确实,这样的功能不存在,并且可能永远不会因为应用程序需要写入权限才能使其工作。结果:这是一个错误。在缓存之前,应该通过转换处理现有的缩小文件。

      问题

      是否有可能以某种方式说服捆绑和缩小:

      1. 不使用现有的缩小文件版本
      2. 对现有的缩小版本运行转换

2 个答案:

答案 0 :(得分:1)

你考虑过使用Grunt吗? http://gruntjs.com/

它有一个学习曲线,但是,信息池是巨大的。您使用网络必需品时遇到的问题不会成为问题。

我现在在VS中使用它来缩小,捆绑和转换css和javascript,以及将文件重新组织到部署目录中。一旦设置了目录结构,就可以很容易地重用grunt文件。

使用VS(链接,下方)中的加载项,您可以右键单击grunt文件并从弹出菜单中选择要运行的grunt任务。

https://visualstudiogallery.msdn.microsoft.com/dcbc5325-79ef-4b72-960e-0a51ee33a0ff

可以通过下载各种插件即https://www.npmjs.com/package/grunt-contrib-less来创建调用它们的Grunt“任务”。

答案 1 :(得分:0)

我从未使用过LESS或网络必需品,所以请把这篇文章看作是值得的(不多。)你能否添加一个pre-build命令来简单地删除旧文件,然后在需要时进行重建更新CSS。