2012-02-23 81 views
2

我正在使用SquishIt在MVC 3項目中合併和縮小我的JavaScript文件。我試圖創建一個脫機cache.manifest和編輯之間改變的哈希碼正在殺死我。有沒有辦法刪除附加到包的哈希?有沒有一種方法可以從SquishIt中的組合javascript文件中刪除哈希?

我檢查了BundleBase.cs班,並看到一個HashKeyNamed方法,但無法弄清楚我會在哪裏使用它。

這裏是我現有的合成方法:

@Html.Raw(SquishIt.Framework.Bundle.JavaScript() 
.Add("~/js/libs/persistence.js") 
.Add("~/js/offline.common.js") 
.Add("~/js/offline.syncmanager.js") 
// snip... 
.ForceRelease()  
.WithMinifier(SquishIt.Framework.JavaScript.Minifiers.JavaScriptMinifiers.NullMinifier)  
.Render("~/js/offline_script.js")) 
+0

您提到的方法可能是打算添加到界面,但我無法肯定地說。我懷疑你最好用一種允許從渲染文件名中排除查詢字符串散列的方法(不只是重命名它)。我建議在github上打開一個問題 - 繞過緩存失效的用例似乎足夠合理,而且我可以看到此更改對其他用戶有用。 – AlexCuse 2012-02-23 10:26:51

+0

@AlexCuse謝謝。我提到HashKeyNamed屬性的原因是因爲如果將它設置爲null,我會注意到render方法會繞過將它添加到URL中。 – Jacob 2012-02-23 14:48:58

+0

啊,好的。我們可以在幕後使用它,但我認爲'WithoutHash'方法可能更有意義。由於這會癱瘓正常的瀏覽器緩存,我認爲儘可能明確地儘可能明確。 – AlexCuse 2012-02-23 21:52:12

回答

3

對不起,我遲到了。

在最新版本中,有一個名爲.WithoutRevisionHash()的捆綁方法,可以執行您所需的操作。這種方法實際應運而生,這要歸功於Jacob的此處提及的拉動請求。

該方法本身只是一個名爲.HashKeyNamed()的以前存在的方法的包裝,可以使用空字符串調用,因爲他指出要完成後續的結果。但希望新方法更直觀/可發現:)

2

我最近submitted a pull已經在SquishIt一些更好的支持這一點,但在此期間,我想你可以通過創建自己的自定義JavaScriptBundle和使用HashKeyNamed()方法把這事辦成。

public class NoHashJavaScriptBundle : JavaScriptBundle 
{ 
    public NoHashJavaScriptBundle() 
     : base() 
    { } 

    protected override string BeforeMinify(string outputFile, List<string> files, IEnumerable<string> arbitraryContent) 
    { 
     // Set the hash key to empty to keep it from being appended in Render. 
     HashKeyNamed(string.Empty); 

     return base.BeforeMinify(outputFile, files, arbitraryContent); 
    } 
} 

然後在你的_Layout你可以做這樣的事情:

@Html.Raw(new NoHashJavaScriptBundle() 
.Add("~/js/libs/persistence.js") 
.Add("~/js/offline.common.js") 
.Add("~/js/offline.syncmanager.js") 
// snip... 
.ForceRelease()  
.WithMinifier(SquishIt.Framework.JavaScript.Minifiers.JavaScriptMinifiers.NullMinifier)  
.Render("~/js/DontHashMeBro.js")) 
相關問題