MVC4贝塔缩小和捆绑:订购浏览器
我使用捆绑开始,包括在MVC4贝塔缩小文件和调试。我遇到了几个问题:MVC4贝塔缩小和捆绑:订购浏览器
首先,如果我使用经典的<script src="Folder/js" type="text/javascript"/>
捆绑,似乎我必须重命名我的文件以确保它们按照正确的顺序捆绑在一起。
- 比方说,我有三个JavaScript文件: “ants.js”, “bugs.js”, “insects.js”
- ants.js取决于bugs.js
- bugs.js取决于insects.js
- 默认捆绑似乎捆绑他们按字母顺序排列。
- 为了让它们正确绑定,我必须将它们重命名为:“0.insects.js”,“1.bugs.js”,“2.ants.js”
- 这真的很骇人,做一个更清洁的方式。
我有下一个问题是调试。我喜欢在我的测试浏览器中浏览javascript,有没有办法在DEBUG模式下关闭缩小?
编辑:要清楚,我知道我可以创建束和从C#进行注册,它只是似乎真的很丑不得不这样做的。
要暂时获得非缩小的输出使用该
public class NonMinifyingJavascript : IBundleTransform
{
public void Process(BundleContext context, BundleResponse bundle)
{
if(bundle == null)
{
throw new ArgumentNullException("bundle");
}
context.HttpContext.Response.Cache.SetLastModifiedFromFileDependencies();
foreach(FileInfo file in bundle.Files)
{
HttpContext.Current.Response.AddFileDependency(file.FullName);
}
bundle.ContentType = "text/javascript";
//base.Process(context, bundle);
}
}
如果你想让它完全基于对配置设置,我想你可以创建一个IBundle变换一个或JsMinify取决于你的配置代表本设置
为了控制你需要使用BundleFileSetOrdering
var javascriptBundle = new Bundle("~/site/js", new NonMinifyingJavascript());
//controls ordering for javascript files, otherwise they are processed in order of AddFile calls
var bootstrapOrdering = new BundleFileSetOrdering("bootstrap");
//The popover plugin requires the tooltip plugin
bootstrapOrdering.Files.Add("bootstrap-tooltip.js");
bootstrapOrdering.Files.Add("bootstrap-popover.js");
BundleTable.Bundles.FileSetOrderList.Add(bootstrapOrdering);
javascriptBundle.AddDirectory("~/Scripts", "bootstrap-*.js");
这正是我需要它做的事情,它吸收它不能做得更无暇,但我会采取我能得到的。 – 2012-03-13 02:38:48
我昨天碰到了同样的问题,找不到新System.Web.Optimization命名空间的一个很好的解决方案。有一些破碎的MSDN链接,这样的事实,一切都处于测试阶段,意味着它可能会改变,但我离题...
你总是可以在开发过程中不同加载脚本比在生产。容易做到的AppSetting:
@if (System.Configuration.
ConfigurationManager.AppSettings["BundleResources"] != null)
{
@* load the css & js using bundles *@
}
else
{
@* load the css & js files individually*@
}
然后,您可以启用/在web.config中注释掉的appsetting禁用优化的东西:
<appSettings>
...
<!--<add key="BundleResources" value="uhuh" />-->
...
</appSettings>
Yeesh,这是次优。看起来他们只是提供了功能,而且他们自己还没有使用它。我无法想象它长久保持这种状态。 – 2012-03-11 18:26:14
有意无意地,我正在用类似于'@ {#if DEBUG}'的编译器指令来做类似这样的事情,它看起来很丑。 – 2012-03-11 18:28:23
大声笑,是啊我已经看到他们已经改变了API的一些地方(新的JsMinify()而不是typeof(JsMinify))。我无法想象它会长期保持这种状态。如果捆绑/缩小很重要,也可能想要像Matt公布的那样查看RequestReduce。 – danludwig 2012-03-11 18:43:53
也可以看看RequestReduce。它将您的脚本和CSS捆绑在一起,无需任何编码或配置,只需查看它们如何布置在您的页面上并根据此进行捆绑即可。它还允许您通过web.config或通过查询字符串参数RRFilter=disabled
个别请求turn off bundling and minification。
这真的很有趣,我最终可能会使用类似的东西。不过,部分我真的想坚持使用MVC 4打包的内容。 – 2012-03-11 18:48:18
如果有任何安慰,这是什么在MSDN/Technet属性上使用,包括MSDN博客的捆绑/缩小。 – 2012-03-11 18:54:33
哈哈..我很高兴你明白我需要安慰......因为我做到了。我对这个新的wiz-bang功能感到失望。 – 2012-03-11 19:51:17
我使用MVC的JavaScript文件的顺序默认NoTransform而不是由chrisortman提出的NonMinifyingJavascript。据我所知它也是一样。 但仍不是最佳。理想情况下,我希望在调试时为每个个人脚本文件提供一个脚本标记。这使得我使用VS11进行调试变得更容易(一个调试器,因此我可以在一个调试会话中调试js和c#)。 所以我创造了这个小帮手:
@helper RenderScriptTags(string virtualPath)
{
if (Minify /* some appsetting */)
{
<script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl(virtualPath)"></script>
}
else
{
foreach (var file in System.Web.Optimization.BundleResolver.Current.GetBundleContents(virtualPath))
{
<script src="@Url.Content(file)"></script>
}
}
}
@RenderScriptTags("~/libraries")
我有一个单页的应用程序,所以我有这个在我的主要CSHTML文件,但它可以很容易地通过这个移动到的HtmlHelper扩展方法一概而论。 工程很好!
这段代码也考虑到了BundleFileSetOrdering,如果你设置了一个!
不错的一个! :)非常有用! – MojoDK 2012-06-06 09:56:24
相关问题 - http://stackoverflow.com/questions/9373071/how-to-disable-javascript-css-minification-in-asp-net-mvc-4 – resnyanskiy 2012-03-21 08:30:14