IItemTransform和现有的压缩文件

28

TL;DR: 当在原始(非压缩)文件所在的文件夹中已经存在一个minified文件时,IItemTransform不会被执行。

问题说明

我主要遇到这个问题是因为CSS相对图像引用。如果您在JavaScript文件中使用了IItemTransform,则同样适用。

这是我使用的:

  1. 我正在使用带有Web Essentials插件的Visual Studio来支持LESS文件
  2. 我编写LESS文件并使Web Essentials插件在保存时自动压缩文件
  3. 我还在我的项目中使用捆绑和压缩
  4. 创建CSS捆绑包时,我使用CssRewriteUrlTransform将CSS URL变成绝对路径(例如背景图像),以便在将多个CSS文件捆绑在一起后仍然可以使用图片。

到目前为止,没有什么不寻常的地方,但它却不起作用。

问题似乎是什么?

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

只要它至少运行转换,覆盖这些预先存在的minified文件,那就没问题了。但是它不会。因此,在捆绑包中我最终得到了相对URL,这几乎破坏了所有这些资源。

解决方法

  1. 始终在LESS文件中提供绝对路径
  2. 在Web Essentials设置中禁用保存时的文件压缩
  3. 在定义我的捆绑包时引用minified文件,因为它们没有minified版本(* .min.css没有* .min.min.css),所以压缩程序实际上会选取该文件并对其进行压缩和转换。

从我的开发过程和使用的工具的角度来看(并按照它们配置的方式),这似乎是一个错误。如果这些文件是相同的缩小过程的结果,那么这根本不是一个错误,因为转换将在缩小执行时执行。尽管这样的功能不存在,也很可能永远不会存在,因为应用程序需要写入权限才能使其工作。结果:这是一个错误。现有的缩小文件应该在被缓存之前通过转换进行处理。

问题

有没有办法说服捆绑和缩小要么:

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

想知道修改后的IBundleBuilder版本是否可行,类似于这篇SO文章 - MikeSmithDev
@MikeSmithDev:这是一个相当可行的建议,但当我已经处理捆绑文件并到达我的IBundleTransform时,我将无法再将URL相对路径更改为绝对路径,因为我不知道在捆绑之前原始文件所在的位置... - Robert Koritnik
2个回答

1

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

它有一定的学习曲线,但是信息库非常丰富。你在使用web essentials时遇到的问题,在grunt中不会出现。

我现在正在VS中使用它,用于压缩、打包和转换css和javascript,以及重新组织文件到部署目录中。一旦你设置了目录结构,grunt文件就可以非常容易地被重复使用。

通过VS中的插件(下面链接),你可以右键单击grunt文件,并从弹出菜单中选择要运行的grunt任务。

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

Grunt"任务",可以通过下载各种插件(例如https://www.npmjs.com/package/grunt-contrib-less)来创建。


0

我从未使用过LESS或Web Essentials,所以请根据您的需求评估这篇文章(不要太过认真)。您能否添加一个预构建命令来简单地删除旧文件,然后在需要更新CSS时进行重建。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接