확장명이 .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로 바꾸고 번들에 추가하는 것보다. 나는 그것을하는 올바른 방법이 아니라 일시적인 해결책을 알고 있습니다. 감사하고 행복한 코딩.