强制SquishIt刷新/重新创建缩小的文件

时间:2013-06-12 17:12:22

标签: asp.net-mvc asp.net-mvc-4 squishit

我希望将SquishIt与我们的webapp集成。我在本地测试中注意到的是,SquishIt只生成一次文件。基于其他SO答案并阅读SquishIt代码,我收集说如果HttpCache不包含生成的哈希键的值,则会生成文件。

如果没有重新启动应用程序,或者没有清除HttpCache,如果我删除生成的缩小文件,则SquishIt不会重新创建该文件。

有没有办法强制SquishIt重新创建文件,如果它不存在?

早些时候我们使用的是RequestReduce,我们注意到如果只编辑了css / js文件,它并不总是获取css / js更改(即,web.config未被编辑且应用程序未重新启动)。为了确保获取更改,我们始终在部署时删除所有生成的文件。

  1. 请问Squish总是会检测到更改的代码,即使未修改web.config,也不会重新启动应用程序并且不会清除HttpCache?

      

    [BundleCache.Add](https://github.com/jetheredge/SquishIt/blob/master/SquishIt.Framework/BundleCache.cs#L40-54)方法的代码有助于回答这个问题

  2. 我可以通过简单地删除生成的文件来强制SquishIt生成文件吗?

      

    在考虑了我需要处理的场景之后,这是一个错误的问题。

  3. 编辑:

    1. 为这些生成的文件发送到客户端的缓存标头是什么?
    2. 我的方案如下。我从默认的JS minifier切换到JsMinMinifier。删除文件(设置RenderOnlyIfOutputFileIsMissing)并重新启动应用程序后,生成了缩小的文件。但是,它们与之前的文件具有相同的名称(我错误地认为它将具有不同的名称)。

      刷新浏览器显示新生成的文件是由服务器发送的。这怎么发生的?如果资产上设置了较长的过期缓存标头,则浏览器不应该从服务器请求新文件。 (检查Firebug中的资产,我无法理解缓存策略。对我来说,它似乎设置为缓存几分钟。)

      编辑2:

      我的收获是,没有必要删除生成的文件以导致重新生成。如果相应的源文件发生更改,SquishIt将生成相应的文件。

1 个答案:

答案 0 :(得分:3)

  1. 它应该 - 我们正在为文件(而不是生成的)文件添加缓存依赖项,因此如果其中一个被编辑,则捆绑缓存中的条目应该无效。请参阅BundleCache.Add

  2. 否 - 一旦条目缓存中的条目,我们假设输出文件将在那里,因此您最终找不到该文件。这是设计上的,我们还没有真正听到过令人反感的案例。

  3. 在部署时删除生成的文件应该没问题,即使不是非常必要 - 不管怎样你不需要重新启动应用程序吗?

    如果您真的担心文件挥之不去,可能需要考虑using SquishIt without the file system