2012-02-23 3 views
2

MVC 3 프로젝트에서 내 javascript 파일을 결합하고 축소하기 위해 SquishIt을 사용하고 있습니다. 나는 오프라인 cache.manifest를 만들고 편집 사이에서 바뀌는 해시 코드가 나를 죽이고있다. 번들에 추가 된 해시를 제거하는 방법이 있습니까?SquishIt에서 결합 된 자바 스크립트 파일에서 해시를 제거하는 방법이 있습니까?

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

내가 말할 수는 없지만 언급 한 방법은 아마도 인터페이스에 추가하기위한 것입니다. 나는 당신이 렌더링 된 파일 이름에서 querystring 해시를 제외시키는 방법을 사용하는 것이 더 나을 것이라고 생각한다. github에서이 문제를 열 ​​것을 권하고 싶습니다. 캐시 무효화를 우회하는 유스 케이스가 적당하고, 다른 사람들에게 유용하다는 것을 알 수 있습니다. – AlexCuse

+0

@AlexCuse 감사합니다. 내가 HashKeyNamed 속성을 언급 한 이유는 null로 설정하면 렌더링 메서드가 URL에 URL을 추가하지 않기 때문입니다. – Jacob

+0

아, 좋아. 아마 우리는 그 장면 뒤에 사용할 수 있지만 'WithHash'메서드가 더 이해할 수 있다고 생각합니다. 이것이 일반 브라우저 캐싱을 절름발이로 만들 것이므로 가능한 한 명확하게 표현하는 것이 가장 좋습니다. – AlexCuse

답변

3

늦어서 파티에 있어요.

최신 버전에는 필요한 작업을 수행 할 수있는 .WithoutRevisionHash()라는 번들에 대한 메소드가 있습니다. 이 방법은 실제로 여기에 언급 된 Jacob의 풀 요청으로 인해 발생했습니다.

메서드 자체는 이전에 있던 기존 메서드 인 .HashKeyNamed()에 대한 래퍼이며 나중에 결과를 얻기 위해 빈 문자열로 호출 할 수 있습니다. 다행히도 새로운 방법은 좀 더 직관적/발견 가능합니다 :)

2

나는 SquishIt이 몇 가지 더 나은 지원을 위해 최근 submitted a pull했지만, 그 동안, 난 당신이 사용자 정의 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")) 
관련 문제