TL;DR:IItemTransform
当缩小文件已存在于与原始(非缩小)文件相同的文件夹中时,不会执行。
问题说明
我遇到这个问题主要是因为 CSS 相关图像引用。如果您使用IItemTransform
Javascript 文件,则同样适用。
这就是我正在使用的:
- 我正在使用带有 Web Essentials 插件的 Visual Studio 来支持 LESS 文件
- 我正在编写 LESS 文件并让 Web Essentials 插件在保存时自动缩小文件
- 我也在我的项目中使用捆绑和缩小
- 在创建 CSS 包时,我
CssRewriteUrlTransform
用来使 CSS URL 成为绝对的(即背景图像),以便在将多个 CSS 文件捆绑在一起后图像仍然可以工作
到目前为止,这里没有什么异常,但它不起作用。
似乎是什么问题?
捆绑和缩小的工作方式是尽量避免过度处理。这意味着当缩小文件与原始文件存在于同一文件夹中时,它不会运行自己的缩小文件,而是提供现有文件。
只要它至少对那些预先存在的缩小文件运行转换,就可以了。但事实并非如此。所以我最终得到了一个捆绑包中的相对 URL,这几乎破坏了所有这些资源。
解决方法
- 始终在 LESS 文件中提供绝对路径
- 在 Web Essentials 设置中禁用保存文件缩小
- 定义我的包时请参考缩小文件,因为它们没有缩小版本(*.min.css 没有 *.min.min.css),所以缩小器实际上会拾取文件并缩小,同时还运行转换它。
从我的开发过程和使用的工具(以及它们的配置方式)的角度来看,这看起来像是一个错误。如果这些文件是同一缩小过程的结果,那么这根本不是一个错误,因为在执行缩小时会执行转换。确实,此类功能不存在,而且可能永远不会存在,因为应用程序需要写入权限才能使其工作。结果:这是一个错误。现有的缩小文件应在缓存之前通过转换进行处理。
问题
是否有可能以某种方式说服捆绑和缩小:
- 不使用现有的缩小文件版本
- 在现有的缩小版本上运行转换