ASP.NET 번들최소화 비활성화 방법
있습니다debug="true"
내 web.config 모두에서, 그리고 나는 단지 내 번들이 최소화되는 것을 원하지 않지만, 내가 하는 어떤 것도 그것을 비활성화하지 않는 것 같습니다.해봤습니다enableoptimisations=false
내 코드는 다음과 같습니다.
//Javascript
bundles.Add(new ScriptBundle("~/bundles/MainJS")
.Include("~/Scripts/regular/lib/mvc/jquery.validate.unobtrusive.js*")
.Include("~/Scripts/regular/lib/mvc/jquery.validate*")
.Include("~/Scripts/regular/lib/bootstrap.js")
.IncludeDirectory("~/Scripts/regular/modules", "*.js", true)
.IncludeDirectory("~/Scripts/regular/pages", "*.js", true)
.IncludeDirectory("~/Scripts/regular/misc", "*.js", true));
//CSS
bundles.Add(new StyleBundle("~/bundles/MainCSS")
.Include("~/Content/css/regular/lib/bootstrap.css*")
.IncludeDirectory("~/Content/css/regular/modules", "*.css", true)
.IncludeDirectory("~/Content/css/regular/pages", "*.css", true))
조건부 컴파일 지침은 다음과 같습니다.
#if DEBUG
var jsBundle = new Bundle("~/Scripts/js");
#else
var jsBundle = new ScriptBundle("~/Scripts/js");
#endif
가지고 계신다면,debug="true"
web.config에서 사용하고 있습니다.Scripts/Styles.Render
페이지의 번들을 참조하려면 번들링과 최소화를 모두 해제해야 합니다. BundleTable.EnableOptimizations = false
디버그 참/거짓 플래그에 관계없이 항상 번들링과 최소화를 모두 해제합니다.
당신은 아마도 사용하지 않을 것입니다.Scripts/Styles.Render
도우미?번들에 대한 참조를 직접 렌더링하는 경우BundleTable.Bundles.ResolveBundleUrl()
항상 축소/축소된 컨텐츠를 얻을 수 있습니다.
번들링과 최소화를 비활성화하려면 이 .aspx 파일을 넣기만 하면 됩니다. (이것은 비록 최적화를 비활성화합니다.debug=true
web.config에서)
vb.net :
System.Web.Optimization.BundleTable.EnableOptimizations = false
c#.net
System.Web.Optimization.BundleTable.EnableOptimizations = false;
,EnableOptimizations = true
이것은 묶이고 축소될 것입니다.debug=true
web.config에서
변환을 지우기만 하면 번들의 최소화를 해제할 수 있습니다.
var scriptBundle = new ScriptBundle("~/bundles/scriptBundle");
...
scriptBundle.Transforms.Clear();
개인적으로 모든 스크립트를 단일 파일로 번들하고 싶지만 디버깅 단계에서 가독성이 필요할 때 이 기능이 유용하다는 것을 알게 되었습니다.
저는 이런 제안들을 많이 시도했지만, 메모하는 것이 효과가 있는 것 같았습니다.저는 꽤 많은 시간을 허비했지만 이것이 제 실수라는 것을 알게 되었습니다.
@Scripts.Render("/bundles/foundation")
내가 무엇을 시도하든, 그것은 항상 javascript를 최소화하고 번들했습니다.대신, 저는 이것을 사용했어야 했습니다.
@Scripts.Render("~/bundles/foundation")
여분의 '~'가 해냈습니다.저는 심지어 그것이 정말로 그것인지 확인하기 위해 단 한 번의 사례에서 그것을 다시 제거했습니다.그건...제가 이 일로 허비한 시간을 적어도 한 명은 절약할 수 있기를 바랍니다.
몇 가지 답변을 결합하면 ASP에서 제게 도움이 됩니다.NET MVC 4.
bundles.Add(new ScriptBundle("~/Scripts/Common/js")
.Include("~/Scripts/jquery-1.8.3.js")
.Include("~/Scripts/zizhujy.com.js")
.Include("~/Scripts/Globalize.js")
.Include("~/Scripts/common.js")
.Include("~/Scripts/requireLite/requireLite.js"));
bundles.Add(new StyleBundle("~/Content/appLayoutStyles")
.Include("~/Content/AppLayout.css"));
bundles.Add(new StyleBundle("~/Content/css/App/FunGrapherStyles")
.Include("~/Content/css/Apps/FunGrapher.css")
.Include("~/Content/css/tables.css"));
#if DEBUG
foreach (var bundle in BundleTable.Bundles)
{
bundle.Transforms.Clear();
}
#endif
또한 최소화(및 기타 기능)를 수동으로 제어하는 간단한 방법도 있습니다.이것은 다음과 같이 사용하는 새로운 CssMinify() 변압기입니다.
// this is in case when BundleTable.EnableOptimizations = false;
var myBundle = new StyleBundle("~/Content/themes/base/css")
.Include("~/Content/themes/base/jquery.ui.core.css" /* , ... and so on */);
myBundle.Transforms.Add(new CssMinify());
bundles.Add(myBundle);
// or you can remove that transformer in opposite situation
myBundle.Transforms.Clear();
그것은 당신이 일부 번들을 특수 부품으로 축소하고 싶을 때 편리합니다.예를 들어, 당신은 당신의 발밑에 있는 표준(jQuery) 스타일을 사용하고 있지만(너무 많은 브라우저 요청을 받음), 당신은 당신 자신의 스타일시트를 축소하지 않고 유지하기를 원합니다. (동일 - 자바스크립트 사용)
저는 이 질문에서 다른 사람들이 제시한 몇 가지 답변을 종합하여 다른 대안을 제시했습니다.
목표: 항상 파일을 번들하고, 다음과 같은 경우에 JS와 CSS 미니화를 비활성화합니다.<compilation debug="true" ... />
CSS 번들에 항상 사용자 지정 변환을 적용합니다.
내 솔루션:
web.config에서:<compilation debug="true" ... />
Global.asax Application_Start() 메서드에서 다음을 수행합니다.
protected void Application_Start() {
...
BundleTable.EnableOptimizations = true; // Force bundling to occur
// If the compilation node in web.config indicates debugging mode is enabled
// then clear all transforms. I.e. disable Js and CSS minification.
if (HttpContext.Current.IsDebuggingEnabled) {
BundleTable.Bundles.ToList().ForEach(b => b.Transforms.Clear());
}
// Add a custom CSS bundle transformer. In my case the transformer replaces a
// token in the CSS file with an AppConfig value representing the website URL
// in the current environment. E.g. www.mydevwebsite in Dev and
// www.myprodwebsite.com in Production.
BundleTable.Bundles.ToList()
.FindAll(x => x.GetType() == typeof(StyleBundle))
.ForEach(b => b.Transforms.Add(new MyStyleBundleTransformer()));
...
}
다음 속성을 false로 설정하면 번들링과 최소화가 모두 비활성화됩니다.
Global.asax.cs 파일에서 아래에 언급된 대로 행을 추가합니다.
protected void Application_Start()
{
System.Web.Optimization.BundleTable.EnableOptimizations = false;
}
다음은 번들별로 최소화를 사용하지 않도록 설정하는 방법입니다.
bundles.Add(new StyleBundleRaw("~/Content/foobarcss").Include("/some/path/foobar.css"));
bundles.Add(new ScriptBundleRaw("~/Bundles/foobarjs").Include("/some/path/foobar.js"));
참고 사항:번들에 사용되는 경로는 게시된 빌드의 실제 경로와 일치하면 안 됩니다. 그렇지 않으면 아무 것도 작동하지 않습니다.또한 번들의 이름에 .js, .css 및/또는 '.' 및 '_'를 사용하지 않도록 하십시오.위의 예와 같이 이름을 최대한 단순하고 간단하게 유지합니다.
도우미 클래스는 다음과 같습니다.이러한 클래스를 미래에 대비하기 위해 를 사용하는 대신 js/css 축소 인스턴스를 제거합니다.clear () 그리고 우리는 또한 프로덕션 빌드가 특히 CSS-build를 적절하게 넘겨줄 때 문제가 발생할 수밖에 없는 MIME-type-setter 변환을 삽입합니다(MIME-type이 기본값인 "text/set"로 설정된 CSS 번들과 크롬 거부).
internal sealed class StyleBundleRaw : StyleBundle
{
private static readonly BundleMimeType CssContentMimeType = new BundleMimeType("text/css");
public StyleBundleRaw(string virtualPath) : this(virtualPath, cdnPath: null)
{
}
public StyleBundleRaw(string virtualPath, string cdnPath) : base(virtualPath, cdnPath)
{
Transforms.Add(CssContentMimeType); //0 vital
Transforms.Remove(Transforms.FirstOrDefault(x => x is CssMinify)); //0
}
//0 the guys at redmond in their infinite wisdom plugged the mimetype "text/css" right into cssminify upon unwiring the minifier we
// need to somehow reenable the cssbundle to specify its mimetype otherwise it will advertise itself as html and wont load
}
internal sealed class ScriptBundleRaw : ScriptBundle
{
private static readonly BundleMimeType JsContentMimeType = new BundleMimeType("text/javascript");
public ScriptBundleRaw(string virtualPath) : this(virtualPath, cdnPath: null)
{
}
public ScriptBundleRaw(string virtualPath, string cdnPath) : base(virtualPath, cdnPath)
{
Transforms.Add(JsContentMimeType); //0 vital
Transforms.Remove(Transforms.FirstOrDefault(x => x is JsMinify)); //0
}
//0 the guys at redmond in their infinite wisdom plugged the mimetype "text/javascript" right into jsminify upon unwiring the minifier we need
// to somehow reenable the jsbundle to specify its mimetype otherwise it will advertise itself as html causing it to be become unloadable by the browsers in published production builds
}
internal sealed class BundleMimeType : IBundleTransform
{
private readonly string _mimeType;
public BundleMimeType(string mimeType) { _mimeType = mimeType; }
public void Process(BundleContext context, BundleResponse response)
{
if (context == null)
throw new ArgumentNullException(nameof(context));
if (response == null)
throw new ArgumentNullException(nameof(response));
response.ContentType = _mimeType;
}
}
이 모든 것이 작동하려면 nugget을 통해 설치해야 합니다.
WebGrease 1.6.0+ Microsoft.AsNet.Web.최적화 1.1.3+
web.config는 다음과 같이 강화되어야 합니다.
<runtime>
[...]
<dependentAssembly>
<assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-x.y.z.t" newVersion="x.y.z.t" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-x.y.z.t" newVersion="x.y.z.t" />
</dependentAssembly>
[...]
</runtime>
<!-- setting mimetypes like we do right below is absolutely vital for published builds because for some reason the -->
<!-- iis servers in production environments somehow dont know how to handle otf eot and other font related files -->
<system.webServer>
[...]
<staticContent>
<!-- in case iis already has these mime types -->
<remove fileExtension=".otf" />
<remove fileExtension=".eot" />
<remove fileExtension=".ttf" />
<remove fileExtension=".woff" />
<remove fileExtension=".woff2" />
<mimeMap fileExtension=".otf" mimeType="font/otf" />
<mimeMap fileExtension=".eot" mimeType="application/vnd.ms-fontobject" />
<mimeMap fileExtension=".ttf" mimeType="application/octet-stream" />
<mimeMap fileExtension=".woff" mimeType="application/font-woff" />
<mimeMap fileExtension=".woff2" mimeType="application/font-woff2" />
</staticContent>
<!-- also vital otherwise published builds wont work https://stackoverflow.com/a/13597128/863651 -->
<modules runAllManagedModulesForAllRequests="true">
<remove name="BundleModule" />
<add name="BundleModule" type="System.Web.Optimization.BundleModule" />
</modules>
[...]
</system.webServer>
글꼴 등의 측면에서 CSS 번들이 작동하도록 하려면 추가 단계를 수행해야 할 수도 있습니다.하지만 그것은 다른 이야기입니다.
을 합니다.EnableOptimizations
의 프로젝트에 있는 .
그래서 당신이 찾는다면,
BundleTable.EnableOptimizations = true;
보다false
.
이렇게 하면 최소화가 비활성화되고 번들링이 완전히 비활성화됩니다.
이미 제시된 답변을 보충하기 위해,다른 파일에 대한 전체 번들 및 최소화를 허용하면서 일부 파일을 최소화/난독화/연결하지 않으려면 번들의 가상 경로를 렌더링하는 대신 특정 번들의 내용을 읽고 페이지에 파일을 렌더링하는 사용자 지정 렌더러를 사용하는 것이 가장 좋습니다.제 CSS 파일이 미니화 기능이 꺼진 상태에서도 번들로 제공될 때 IE 9가 침대에서 $*%@을 했기 때문에 개인적으로 이것을 필요로 했습니다.
이 기사 덕분에 CSS용 파일을 렌더링하면서도 시스템이 내 자바스크립트 파일을 번들/미니화/난독화할 수 있는 CSS 렌더러를 만드는 데 사용한 코드의 출발점이 되었습니다.
정적 도우미 클래스를 만들었습니다.
using System;
using System.Text;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
namespace Helpers
{
public static class OptionalCssBundler
{
const string CssTemplate = "<link href=\"{0}\" rel=\"stylesheet\" type=\"text/css\" />";
public static MvcHtmlString ResolveBundleUrl(string bundleUrl, bool bundle)
{
return bundle ? BundledFiles(BundleTable.Bundles.ResolveBundleUrl(bundleUrl)) : UnbundledFiles(bundleUrl);
}
private static MvcHtmlString BundledFiles(string bundleVirtualPath)
{
return new MvcHtmlString(string.Format(CssTemplate, bundleVirtualPath));
}
private static MvcHtmlString UnbundledFiles(string bundleUrl)
{
var bundle = BundleTable.Bundles.GetBundleFor(bundleUrl);
StringBuilder sb = new StringBuilder();
var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
foreach (BundleFile file in bundle.EnumerateFiles(new BundleContext(new HttpContextWrapper(HttpContext.Current), BundleTable.Bundles, bundleUrl)))
{
sb.AppendFormat(CssTemplate + Environment.NewLine, urlHelper.Content(file.VirtualFile.VirtualPath));
}
return new MvcHtmlString(sb.ToString());
}
public static MvcHtmlString Render(string bundleUrl, bool bundle)
{
return ResolveBundleUrl(bundleUrl, bundle);
}
}
}
그런 다음 레이저 레이아웃 파일에서:
@OptionalCssBundler.Render("~/Content/css", false)
표준 대신:
@Styles.Render("~/Content/css")
자바스크립트 파일을 위한 선택적 렌더러를 만드는 것도 이 도우미에게 업데이트하는 데 거의 필요하지 않을 것이라고 확신합니다.
LESS/SASS CSS 변환을 사용하는 경우 옵션이 있습니다.useNativeMinification
web.config에서 최소화를 비활성화하기 위해 false로 설정할 수 있습니다.내 목적을 위해 필요할 때 여기서 변경하지만, web.config 변환을 사용하여 릴리스 빌드에서 항상 활성화하거나 코드에서 수정할 수 있습니다.
<less useNativeMinification="false" ieCompat="true" strictMath="false"
strictUnits="false" dumpLineNumbers="None">
팁: 이것의 요점은 브라우저 검사 도구에서 또는 파일을 여는 것만으로 CSS를 보는 것입니다.번들링이 활성화되면 모든 컴파일에서 파일 이름이 변경되므로 페이지 상단에 다음과 같이 입력하여 매번 변경될 때마다 컴파일된 CSS를 새 브라우저 창에서 매일 볼 수 있습니다.
@if (Debugger.IsAttached)
{
<a href="@Styles.Url(ViewBag.CSS)" target="css">View CSS</a>
}
이것은 동적 URL이 될 것입니다.https://example.com/Content/css/bundlename?v=UGd0FjvFJz3ETxlNN9NVqNOeYMRrOkQAkYtB04KisCQ1
업데이트: 배포/릴리스 빌드 중에 true로 설정하기 위해 web.config 변환을 만들었습니다.
<bundleTransformer xmlns="http://tempuri.org/BundleTransformer.Configuration.xsd">
<less xdt:Transform="Replace" useNativeMinification="true" ieCompat="true" strictMath="false" strictUnits="false" dumpLineNumbers="None">
<jsEngine name="MsieJsEngine" />
</less>
</bundleTransformer>
VS를 통해 설정할 때 새 프레임워크가 기본값을 얻기 때문에 미래의 누군가에게 유용할 수 있습니다.web.config
,web.Debug.config
그리고.web.Release.config
.에서web.release.config
다음 행을 찾을 수 있습니다.
<compilation xdt:Transform="RemoveAttributes(debug)" />
이것은 제가 한 모든 인라인 변경을 무시하는 것처럼 보였습니다.저는 이 라인을 언급했고 우리는 그레이비였습니다("릴리스" 빌드에서 최소화되지 않은 코드를 보는 관점에서).
언급URL : https://stackoverflow.com/questions/11944745/asp-net-bundles-how-to-disable-minification
'source' 카테고리의 다른 글
Haskell을 사용한 Excel 자동화로 세그먼트 결함 발생 (0) | 2023.04.27 |
---|---|
ASP에서 divs를 위한 코드 뒤에 있는 파일에서 CSS 스타일을 어떻게 수정합니까?NET? (0) | 2023.04.27 |
스위프트에서 willSet과 doSet의 목적은 무엇입니까? (0) | 2023.04.27 |
WPF의 양호한 수치 UpDown 등가물? (0) | 2023.04.27 |
PUT의 Azure BLOB 스토리지 문서에서 "404 리소스를 찾을 수 없음" (0) | 2023.04.27 |