.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는 다음과 같은 동작을 암시합니다 (그리고 프로젝트에서 따르기를 선호합니다).
짧은 버전
- 프로젝트의 동일한 폴더에 스크립트의 디버그 버전과 축소 버전이 모두 있습니다.
- script.js
- script.min.js
- 코드의 번들에는 script.js 만 추가합니다 .
그 결과는 것입니다 자동으로 이 script.js 에 포함 된 디버그 모드와 script.min.js 에서 RELEASE의 모드.
긴 버전
.debug.js 버전 도있을 수 있습니다 . 이 경우 파일은 DEBUG의 다음 우선 순위에 포함됩니다.
- script.debug.js
- script.js
릴리스에서 :
- script.min.js
- script.js
노트
그건 그렇고, 유일한 이유는이하는 30 ℃와 pH 5.5 또는 다른 pH의 MVC4가 축소 된 버전이 자동으로 처리 할 수없는 경우가에서 스크립트의 버전을. 예를 들어 다음 코드는 자동으로 난독 처리 할 수 없습니다.
if (DEBUG) console.log("Debug message");
다른 모든 경우에는 스크립트의 디버그 버전 만 사용할 수 있습니다.
파일의 축소 버전 만 있으면 축소 된 파일을 복사하고 복사 된 파일 이름에서 .min을 제거한 다음 번들에서 축소되지 않은 파일 이름을 참조하는 것이 가장 간단한 해결책입니다.
예를 들어 js 구성 요소를 구입했는데 some-lib-3.2.1.min.js라는 파일이 있다고 가정합니다. 이 파일을 번들로 사용하려면 다음을 수행하십시오.
some-lib-3.2.1.min.js를 복사하고 복사 된 파일의 이름을 some-lib-3.2.1.js로 바꿉니다. 프로젝트에 두 파일을 모두 포함하십시오.
다음과 같이 번들에서 축소되지 않은 파일을 참조하십시오.
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
'Programing' 카테고리의 다른 글
배경색과 배경색의 차이점은 무엇입니까 (0) | 2020.04.01 |
---|---|
코드를 대문자 또는 소문자로 변환하는 Intellij 단축키? (0) | 2020.04.01 |
2D float numpy array를 2D int numpy array로 변환하는 방법은 무엇입니까? (0) | 2020.03.31 |
Python-문자열을 하위 프로세스에 어떻게 전달합니까? (0) | 2020.03.31 |
사전을 JSON으로 변환 (0) | 2020.03.31 |