Programing

.min 파일을 포함하지 않는 번 들러

lottogame 2020. 3. 31. 08:14
반응형

.min 파일을 포함하지 않는 번 들러


확장명이 .min.js 인 파일을 포함하지 않는 mvc4 번 들러에 이상한 문제가 있습니다.

내 BundleConfig 클래스에서 선언합니다.

public static void RegisterBundles(BundleCollection bundles)
{
    bundles.Add(new ScriptBundle("~/Scripts/jquery")
        .Include("~/Scripts/jquery-1.8.0.js")
        .Include("~/Scripts/jquery.tmpl.min.js"));            
}

내 견해로는, 나는 선언한다

<html>
    <head>
    @Scripts.Render("~/Scripts/jquery")
    </head><body>test</body>
</html>

렌더링 할 때는 렌더링 만

<html>
    <head>
         <script src="/Scripts/jquery-1.8.0.js"></script>
    </head>
    <body>test</body>
</html>

jquery.tmpl.min.js의 이름을 jquery.tmpl.js로 바꾸고 그에 따라 번들의 경로를 업데이트하면 두 스크립트가 모두 올바르게 렌더링됩니다.

'.min.js'파일을 무시하도록하는 구성 설정이 있습니까?


내가 처음 게시 한 솔루션은 의문의 여지가 있습니다 (더러운 해킹입니다). 조정 된 동작은 Microsoft.AspNet.Web.Optimization 패키지에서 변경되었으며 많은 주석 작성자가 지적한 것처럼 조정이 더 이상 작동하지 않습니다. 현재 패키지 1.1.3 버전에서는 전혀 문제를 재현 할 수 없습니다.

수행하려는 작업을 더 잘 이해 하려면 System.Web.Optimization.BundleCollection ( 예 : dotPeek사용할 수 있음) 소스를 참조하십시오 . Max Shmelev의 답변 도 읽으십시오 .

원래 답변 :

.min.js의 이름을 .js로 바꾸거나 다음과 같은 작업을 수행하십시오.

    public static void AddDefaultIgnorePatterns(IgnoreList ignoreList)
    {
        if (ignoreList == null)
            throw new ArgumentNullException("ignoreList");
        ignoreList.Ignore("*.intellisense.js");
        ignoreList.Ignore("*-vsdoc.js");
        ignoreList.Ignore("*.debug.js", OptimizationMode.WhenEnabled);
        //ignoreList.Ignore("*.min.js", OptimizationMode.WhenDisabled);
        ignoreList.Ignore("*.min.css", OptimizationMode.WhenDisabled);
    }

    public static void RegisterBundles(BundleCollection bundles)
    {
        bundles.IgnoreList.Clear();
        AddDefaultIgnorePatterns(bundles.IgnoreList);
        //NOTE: it's bundles.DirectoryFilter in Microsoft.AspNet.Web.Optimization.1.1.3 and not bundles.IgnoreList

        //...your code
     }

Microsoft는 다음과 같은 동작을 암시합니다 (그리고 프로젝트에서 따르기를 선호합니다).

짧은 버전

  1. 프로젝트의 동일한 폴더에 스크립트의 디버그 버전과 축소 버전이 모두 있습니다.
    • script.js
    • script.min.js
  2. 코드의 번들에는 script.js 만 추가합니다 .

그 결과는 것입니다 자동으로script.js 에 포함 된 디버그 모드와 script.min.js 에서 RELEASE의 모드.

긴 버전

.debug.js 버전 도있을 수 있습니다 . 이 경우 파일은 DEBUG의 다음 우선 순위에 포함됩니다.

  1. script.debug.js
  2. script.js

릴리스에서 :

  1. script.min.js
  2. script.js

노트

그건 그렇고, 유일한 이유는이하는 30 ℃와 pH 5.5 또는 다른 pH의 MVC4가 축소 된 버전이 자동으로 처리 할 수없는 경우가에서 스크립트의 버전을. 예를 들어 다음 코드는 자동으로 난독 처리 할 수 ​​없습니다.

if (DEBUG) console.log("Debug message");

다른 모든 경우에는 스크립트의 디버그 버전 만 사용할 수 있습니다.


파일의 축소 버전 만 있으면 축소 된 파일을 복사하고 복사 된 파일 이름에서 .min을 제거한 다음 번들에서 축소되지 않은 파일 이름을 참조하는 것이 가장 간단한 해결책입니다.

예를 들어 js 구성 요소를 구입했는데 some-lib-3.2.1.min.js라는 파일이 있다고 가정합니다. 이 파일을 번들로 사용하려면 다음을 수행하십시오.

  1. some-lib-3.2.1.min.js를 복사하고 복사 된 파일의 이름을 some-lib-3.2.1.js로 바꿉니다. 프로젝트에 두 파일을 모두 포함하십시오.

  2. 다음과 같이 번들에서 축소되지 않은 파일을 참조하십시오.

    bundles.Add(new ScriptBundle("~/bundles/libraries").Include(
        "~/Scripts/some-lib-{version}.js"
    ));
    

이름에 'min'이없는 파일이 실제로 축소 되었기 때문에 실제로 읽을 수 없다는 사실을 제외하고는 문제를 일으키지 않아야합니다. 디버그 모드에서만 사용되며 별도의 스크립트로 작성됩니다. 디버그 모드가 아닌 경우 사전 컴파일 된 최소 파일이 번들에 포함되어야합니다.


적어도 MVC5에서 작동하는 좋은 솔루션을 찾았습니다 . Bundle대신 사용할 수 있습니다 ScriptBundle. 이 경우 ScriptBundle우리가 좋아하지 않는 똑똑한 행동은 없습니다 (.min 등 무시). 내 솔루션 Bundle에서 .min 및 .map 파일과 함께 3d 파티 스크립트를 사용 ScriptBundle하고 코드에 사용 합니다. 나는 그것을하는 데 대한 단점을 발견하지 못했습니다. 이러한 방식으로 작동하려면 angular.js와 같은 원본 파일을 추가해야하며 디버그에서 angular.js를로드하고 angular.min.js를 릴리스 모드로 번들합니다.


*.min.js파일 을 렌더링하려면 BundleTable.EnableOptimizations모든 번들에 적용되는 전역 설정 인 disable을 사용해야합니다 .

특정 번들에 대해서만 최적화를 사용하려는 경우 번들 ScriptBundle에서 파일을 열거 할 때 최적화를 일시적으로 활성화하는 고유 한 유형을 작성할 수 있습니다 .

public class OptimizedScriptBundle : ScriptBundle
{
    public OptimizedScriptBundle(string virtualPath)
        : base(virtualPath)
    {
    }

    public OptimizedScriptBundle(string virtualPath, string cdnPath)
        : base(virtualPath, cdnPath)
    {
    }

    public override IEnumerable<BundleFile> EnumerateFiles(BundleContext context)
    {
        if (context.EnableOptimizations)
            return base.EnumerateFiles(context);
        try
        {
            context.EnableOptimizations = true;
            return base.EnumerateFiles(context);
        }
        finally
        {
            context.EnableOptimizations = false;
        }
    }
}

축소되지 않은 파일이 있는지 여부에 관계없이 축소 된 파일을 항상 사용해야하는 번들 OptimizedScriptBundle대신에 사용하십시오 ScriptBundle.

축소 된 파일의 모음으로 배포되는 ASP.NET MVC 용 Kendo UI의 예

bundles.Add(new OptimizedScriptBundle("~/bundles/kendo")
        .Include(
            "~/Scripts/kendo/kendo.all.*",
            "~/Scripts/kendo/kendo.aspnetmvc.*",
            "~/Scripts/kendo/cultures/kendo.*",
            "~/Scripts/kendo/messages/kendo.*"));

필자의 경우 디버그 / 비 버전으로 제공되는 (놀라운!) Knockout.js 라이브러리를 사용하고있었습니다.

"~/Scripts/knockout-{Version}.js"
"~/Scripts/knockout-{Version}.Debug.js"

이 작업을 수행하기 위해 번들에 "Knockout- {Version} .js"(비디 버그)를 포함시키고 .debug를 얻었습니다. 디버그 모드의 js 파일.


쉬운 방법 .min 파일의 이름을 바꾸십시오. 예를 들어 abc.min.css가있는 경우이 파일의 이름을 abc_min.css로 바꾸고 번들에 추가하는 것보다. 나는 그것을하는 올바른 방법이 아니라 일시적인 해결책을 알고 있습니다. 감사하고 행복한 코딩.


들러 혜택을 많이 가지고있는 이 페이지를 확인 하지만를 :

Microsoft MVC4 플랫폼 각 스크립트 또는 스타일 번들에 대해 최소 버전 및 최소 버전이 모두 있다고 가정합니다 (디버그 및 vsdoc과 같은 다른 파일도 사용 가능). 따라서 이러한 파일 중 하나만있는 상황에서는 문제가 있습니다.

출력을 처리하기 위해 web.config 파일에서 디버그 상태를 영구적으로 변경할 수 있습니다.

<compilation debug="false" targetFramework="4.0" />

출력 변화를보십시오! 파일 필터링이 변경되었습니다. 목적을 충족 시키려면 애플리케이션 로직을 변경하는 무시 케이스 필터링을 변경해야합니다!


여러분은 마이크로 소프트가 함께 행동 할 때까지 그냥 간직하고 싶습니다

이 시도

RegisterBundles에서 Kendo에 대한이 번들을 작성하십시오.

bundles.Add(new StyleBundle("~/Content/kendo/css").Include(
                    "~/Content/kendo/2012.3.1121/kendo.common.min.css",
                     "~/Content/kendo/2012.3.1121/kendo.dataviz.min.css",
                      "~/Content/kendo/2012.3.1121/kendo.blueopal.min.css"
 ));

_Layout.cshtml에서 다음을 입력하십시오.

@if (HttpContext.Current.IsDebuggingEnabled)
 { 
<link href="@Url.Content("~/Content/kendo/2012.3.1121/kendo.common.min.css")"      
rel="stylesheet"  type="text/css" />
<link href="@Url.Content("~/Content/kendo/2012.3.1121/kendo.dataviz.min.css")" 
rel="stylesheet" type="text/css" />   
<link href="@Url.Content("~/Content/kendo/2012.3.1121/kendo.blueopal.min.css")"    
rel="stylesheet" type="text/css" />
 }
 else
 {
     @Styles.Render("~/Content/kendo/css")   
 }

이런 식으로 프로덕션에서 번들을 최대한 활용하고 디버그에서 참조를 얻습니다.

Microsoft가 MVC 4 코드를 수정하면 문제 해결

참고 URL : https://stackoverflow.com/questions/11980458/bundler-not-include-min-files

반응형