我阅读了这篇文章http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification,我觉得其中缺少很多内容。
我正在开发一个使用未经编辑的javascript文件的项目。然而,当我决定将我的项目发布到另一台服务器时,这就成了一个问题,其中bundle.config劫持了我的javascript文件并执行了我从未知道的事情,我需要测试我的开发,现在我的开发机器抛出各种各样的javascript错误。现在,我在这里,阅读bundle.config对min文件的作用。
阅读完文章后,我做了以下假设:
如果我将项目设置为调试模式,我的项目将获得所有不包含任何" min.js"的文件。文件。
如果我将项目设置为发布模式,我的项目将尝试获取所有min.js文件,如果没有min.js文件,则非min文件将转换为缩小版本。 / p>
基于这两个假设,结果我错误。切换到释放模式不会对min文件执行任何操作,它的行为方式与我的调试模式相同。
其次,进入web.config并将以下内容设置为false(以前为true):
<compilation debug="false" />
获取所有未缩小的文件并缩小它们,忽略我拥有的任何最小文件!我没有看到任何关于File.min.js的内容,我看到的就是:&#34; File?v = dw-fikdksdm ...&#34;这很好,因为这被认为是&#34;捆绑&#34;并且缩小了,但为什么我只能看到我的分钟被加载?如果缩小和捆绑会引发javascript错误会怎样?那时我该怎么办?我可以阻止某些javascript文件不包含在捆绑包中和/或缩小吗?
另外我注意到在尝试加载javascript资源时会发生403错误。
有人可以解释这里发生了什么以及为什么这违背了我原来的假设?
答案 0 :(得分:19)
好的,以下是我发现的一些事情:
在调试模式下,检查web.config:
<system.web>
<compilation debug="true">
然后所有的javascripts都将保存在bundle虚拟目录中(它们不会合并为一个文件,它们将不缩小)。
切换到释放模式时,请切换到:
<system.web>
<compilation debug="false">
以便捆绑包中的所有javascript文件都缩小并编译成单个文件,这样可以减少到网络的往返次数。请注意,每个捆绑包都会创建一个文件。
如果您想要启用优化,无论您是否处于调试模式,请设置BundleTable.EnableOptimizations = true,这会强制缩小和捆绑。如果你将其保留在代码之外,那么BundleConfig将会改为查看web.config。
RegisterBundles(BundleCollection bundles) method in BundleConfig.cs, you put in:
BundleTable.EnableOptimizations = true;
bundles.UseCdn = true;
var cssTransformer = new CssTransformer();
var jsTransformer = new JsTransformer();
var nullOrderer = new NullOrderer();
这就是你添加javascript文件的方式:
var jqueryBundle = new CustomScriptBundle("~/bundles/jquery");
jqueryBundle.IncludeDirectory("~/Scripts/JQuery", "*.js");
jqueryBundle.Transforms.Add(jsTransformer);
jqueryBundle.Orderer = nullOrderer;
bundles.Add(jqueryBundle);
情侣笔记:
如果您使用“Content / css”作为您的捆绑包将出现的虚拟目录,则会发生403错误,这需要更改为“bundles / css”,403将会像这样消失(使用剃刀):
@ Styles.Render( “〜/束/的CSS”)
意思是如果你的代码中有这个(注意〜/ bundle / css在哪里,这将是你的css文件将去的地方):
BundleTable.EnableOptimizations = true;
bundles.UseCdn = true;
var cssTransformer = new CssTransformer();
var jsTransformer = new JsTransformer();
var nullOrderer = new NullOrderer();
#region CSS Styles
var cssBundle = new CustomStyleBundle("~/bundles/css");
cssBundle.IncludeDirectory("~/Content/CSS", "*.css")
.IncludeDirectory("~/Content/CSS/Override", "*.css");
cssBundle.Transforms.Add(cssTransformer);
cssBundle.Orderer = nullOrderer;
bundles.Add(cssBundle);
#endregion
但是如果你想继续使用缩小的javascript并且你不知道哪些文件引发了错误,那么以下步骤将有所帮助:
我希望在撰写本文时有更好的bundle.config文档,但我发现整个体验非常令人失望。