sks*_*laj 12 bundle minify asp.net-mvc-5
我读了这篇文章http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification,我觉得它中缺少很多内容.
我正在开发一个使用未经编辑的javascript文件的项目.然而,当我决定将我的项目发布到另一台服务器时,这就成了一个问题,其中bundle.config劫持了我的javascript文件,做了一些我从未知道我需要测试我的开发的东西,现在我的开发机器抛出各种各样的javascript错误.所以现在,我在这里,阅读bundle.config对min文件的作用.
阅读完文章后,我做了以下假设:
如果我将项目设置为调试模式,我的项目将获得所有不包含任何"min.js"文件的javascript文件.
如果我将项目设置为发布模式,我的项目将尝试获取所有min.js文件,如果没有min.js文件,则非min文件将转换为缩小版本.
基于这两个假设,事实证明我错了.切换到Release模式对min文件没有任何作用,它的作用方式与我的Debug模式相同.
其次,进入web.config并将以下内容设置为false(以前为true):
<compilation debug="false" />
Run Code Online (Sandbox Code Playgroud)
获取所有未缩小的文件并缩小它们,忽略我拥有的任何最小文件!我没有看到任何关于File.min.js的内容,我看到的就像是:"文件?v = dw-fikdksdm ..."这很好,因为这被认为是"捆绑"并且缩小了,但为什么我不能只看到我的分钟装?如果缩小和捆绑会引发javascript错误会怎样?那时我该怎么办?我可以阻止某些javascript文件不被包含在一个包中和/或缩小吗?
另外我注意到在尝试加载javascript资源时会发生一些403错误.
有人可以解释这里发生了什么以及为什么这违背了我原来的假设?
sks*_*laj 19
好的,这里有一些我发现的事情:
在调试模式下,您检查web.config:
<system.web>
<compilation debug="true">
Run Code Online (Sandbox Code Playgroud)
那么所有的javascripts都将保存在bundle虚拟目录中(它们不会合并为一个文件,也不会缩小).
切换到释放模式时,切换到:
<system.web>
<compilation debug="false">
Run Code Online (Sandbox Code Playgroud)
这样,捆绑包中的所有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();
Run Code Online (Sandbox Code Playgroud)
这就是你添加javascript文件的方式:
var jqueryBundle = new CustomScriptBundle("~/bundles/jquery");
jqueryBundle.IncludeDirectory("~/Scripts/JQuery", "*.js");
jqueryBundle.Transforms.Add(jsTransformer);
jqueryBundle.Orderer = nullOrderer;
bundles.Add(jqueryBundle);
Run Code Online (Sandbox Code Playgroud)
情侣笔记:
如果您使用"Content/css"作为您的包将出现的虚拟目录,则会发生403错误,这需要更改为"bundles/css",403将会像这样(使用razor)消失:
@ 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
Run Code Online (Sandbox Code Playgroud)
但是,如果您想继续执行缩小的javascript并且您不知道哪些文件引发了错误,则以下步骤将有所帮助:
我希望在撰写本文时有更好的bundle.config文档,但我发现整个体验非常令人失望.
归档时间: |
|
查看次数: |
11142 次 |
最近记录: |