TL;DR: 当在原始(非压缩)文件所在的文件夹中已经存在一个minified文件时,IItemTransform
不会被执行。
问题说明
我主要遇到这个问题是因为CSS相对图像引用。如果您在JavaScript文件中使用了IItemTransform
,则同样适用。
这是我使用的:
- 我正在使用带有Web Essentials插件的Visual Studio来支持LESS文件
- 我编写LESS文件并使Web Essentials插件在保存时自动压缩文件
- 我还在我的项目中使用捆绑和压缩
- 创建CSS捆绑包时,我使用
CssRewriteUrlTransform
将CSS URL变成绝对路径(例如背景图像),以便在将多个CSS文件捆绑在一起后仍然可以使用图片。
到目前为止,没有什么不寻常的地方,但它却不起作用。
问题似乎是什么?
捆绑和压缩的工作方式是尝试避免过度处理。这意味着当一个minified文件存在于与原始文件相同的文件夹中时,它不会运行自己的压缩,而是提供现有的文件。
只要它至少运行转换,覆盖这些预先存在的minified文件,那就没问题了。但是它不会。因此,在捆绑包中我最终得到了相对URL,这几乎破坏了所有这些资源。
解决方法
- 始终在LESS文件中提供绝对路径
- 在Web Essentials设置中禁用保存时的文件压缩
- 在定义我的捆绑包时引用minified文件,因为它们没有minified版本(* .min.css没有* .min.min.css),所以压缩程序实际上会选取该文件并对其进行压缩和转换。
从我的开发过程和使用的工具的角度来看(并按照它们配置的方式),这似乎是一个错误。如果这些文件是相同的缩小过程的结果,那么这根本不是一个错误,因为转换将在缩小执行时执行。尽管这样的功能不存在,也很可能永远不会存在,因为应用程序需要写入权限才能使其工作。结果:这是一个错误。现有的缩小文件应该在被缓存之前通过转换进行处理。
问题
有没有办法说服捆绑和缩小要么:
- 不使用现有的缩小文件版本
- 对现有的缩小版本运行转换
IBundleBuilder
版本是否可行,类似于这篇SO文章。 - MikeSmithDevIBundleTransform
时,我将无法再将URL相对路径更改为绝对路径,因为我不知道在捆绑之前原始文件所在的位置... - Robert Koritnik