2012-11-07 4 views
0

Rejuicer http://rejuice.me/을 사용하여 보니 내 ASP.net MVC 사이트의 모든 JS 파일을 하나의 JS 파일로 결합했습니다. 이것은 괜찮습니다. 그러나 Application_Start() 이벤트 핸들러에 모든 구성이 설정되어 있으므로 JS 파일을 추가하거나 제거하지 않고도 응용 프로그램을 재설정하거나 다시 사용할 필요가 없습니다.ASP.net Rejuicer는 동적으로 js를 결합합니다.

아무도이 문제를 해결할 수있는 방법에 대한 아이디어가 없습니까? 아니면 Rejuicer에 대한 더 나은 대안이 있다면?

답변

1

Application_Start에서 구성을 로딩하는 것은 절충안입니다. 다른 옵션은 FileSystemWatcher에 연결하여 폴더 변경을 기다리는 것입니다. 웹 애플리케이션의 성격을 감안할 때 이는 이상적이지 않습니다. 어떤 대안은 리셋을 강요하는 web.config를 사용합니다.

(VS.NET에서) 개발 중에 그 일을하는 Workbench과 같은 도구가 있습니다. 이렇게하면 응용 프로그램 시작주기에 대한 종속성이 제거되고 응용 프로그램이 시작될 때 파일이 있습니다.

+0

나는 web.config 아이디어를 생각했지만 거기에 js 파일을 나열하는 것에 다소 이상하다고 느꼈다. – MakkyNZ

+0

질문에 대한 업데이트를 알리는 지 확실하지 않지만 가능한 해결책을 추가했으며 생각을 알고 싶습니다. – MakkyNZ

+0

위 샘플은 파일 수만 비교합니다. 파일 추가 또는 제거에 대해 다룹니다. 그러나 특정 js 파일의 내용은 변경되지 않습니다. 앱을 재설정 할 때 주된 관심사는 무엇인지 설명해 주시겠습니까? 일반적으로 이것은 프로덕션에서는 흔하지 않으며 dev에서 재설정은 큰 문제가 아닙니다. 나는 개인적으로 개발 시간 'juicing'을 선호한다! –

0

_layout.cshtml 파일에서 이와 비슷한 코드가 있습니다. 사이트의 js 파일 목록은 사이트를 재설정하거나 다시 컴파일하지 않고도 정의 할 수 있습니다.

@{ 

    //combine all JS files into one file using Rejuicer. 
    List<string> JsFiles = new List<string>(); 

    //define list of JS files here 
    JsFiles.Add("~/Scripts/One.js"); 
    JsFiles.Add("~/Scripts/Two.js");  


    if (System.Web.HttpContext.Current.Application["JsFileListing"] != null) 
    { 

     var JsFileRejuiced = (List<string>)System.Web.HttpContext.Current.Application["JsFileListing"]; 

     //check if we have any new/removed/renamed files 
     if (JsFiles.Except(JsFileRejuiced).Count()> 0 || JsFileRejuiced.Except(JsFiles).Count() > 0)   
     { 
      //force application reset 
      HttpRuntime.UnloadAppDomain();     
     } 
    } 

    if (System.Web.HttpContext.Current.Application["JsFileListing"] == null) 
    { 

     var Combiner = Rejuicer.OnRequest.ForJs("~/Combined.js").Combine; 

     foreach (var file in JsFiles) 
     { 
      Combiner.File(file); 
     } 
     Combiner.Configure(); 

     System.Web.HttpContext.Current.Application["JsFileListing"] = JsFiles; 
    } 
} 
@Rejuicer.Rejuiced.JsFor("~/Combined.js") 
관련 문제