在我们的ASP.NET MVC 4 Web应用程序中,我们的BundleConfig.cs包括以下内容:
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
"~/Scripts/jquery-ui-{version}.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
"~/Scripts/jquery.unobtrusive*",
"~/Scripts/jquery.validate*"));
bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
"~/Scripts/modernizr-*"));
当我们查看开发服务器上主页的html时,即使将web.config中的调试模式设置为true,我们也可以看到以下脚本标签<compilation debug="true" targetFramework="4.0" />
:
<script src="/AFR/Scripts/jquery-ui-1.8.20.min.js"></script>
<script src="/AFR/Scripts/modernizr-2.5.3.js"></script>
<script src="/AFR/Scripts/jquery-1.7.1.js"></script>
<script src="/AFR/Scripts/jquery-ui-1.8.20.js"></script>
<script src="/AFR/Scripts/jquery.unobtrusive-ajax.js"></script>
<script src="/AFR/Scripts/jquery.validate.js"></script>
<script src="/AFR/Scripts/jquery.validate.unobtrusive.js"></script>
但是,当我们在暂存服务器上部署该应用程序并查看主页的html(查看源代码)时,除之外的所有上述脚本标签<script src="/AFR/Scripts/jquery-ui-1.8.20.min.js"></script>
都丢失了。我们已经验证了这些标记中提到的所有文件都在脚本文件夹中。文件夹结构与开发机上的完全相同。在登台服务器上,web.config fie具有<compilation targetFramework="4.0" />
默认情况下的debug =“ false”。
结果,某些JavaScript函数在登台服务器上失败。暂存和开发计算机均为Windows 2012。
请帮忙。谢谢。
根据您的评论,我们需要研究该Bundling
机制在MVC中的工作方式。
编辑:根据以下VSDev的注释,您需要确保WebGrease已安装到您的项目中。NuGet最容易的是安装此软件包。
设置捆绑软件配置时(以上示例为例)
bundles.Add(new ScriptBundle("~/bundles/mainJs")
.Include("~/Scripts/mainSite.js")
.Include("~/Scripts/helperStuff.js");
然后,您认为自己的呼叫类似@Scripts.Render("~/bundles/mainJs")
。当将web.config设置为调试编译时,或者使用BundleConfig.cs
文件中的以下行显式关闭捆绑
BundleTable.EnableOptimizations = false;
然后,在您看来,您将看到以下渲染结果
<script src="/Scripts/mainSite.js" type="text/javascript"></script>
<script src="/Scripts/helperStuff.js" type="text/javascript"></script>
这些是组成我们捆绑包的单个项目,未压缩且单独列出。这些在调试模式下单独列出的原因是,您可以调试脚本并在编写脚本时查看它们(实际变量名等)。
现在,当我们不在调试编译中并且尚未关闭EnableOptimizations
功能时,MVC会将这些文件组合到我们的捆绑软件中,对其进行压缩(压缩)并仅输出单个脚本标签。
<script src="/bundles/mainJs?v=someBigLongNumber" type="text/javascript"></script>
请注意,源与捆绑软件配置中捆绑软件的名称相同。另外,?v=
只要您更改该捆绑包中的文件,后面的数字就会更改。这是为了防止客户端浏览器缓存旧的js和css文件。
您的脚本仍然存在并正在输出,但是它们已被压缩并合并到一个名为的文件中/bundles/mainJs
。此功能存在于
A)压缩文件并减少正在传输的信息,并且
B)减少访问网站以检索呈现页面所需内容的呼叫次数。
什么都没有丢失,听起来一切都按预期进行。在生产站点中,缩小使得这些文件几乎无法读取,因此为什么缩小在调试时不起作用。
至于为什么jQuery UI仍然是单个JS文件,请确保没有有人将其硬编码到您的布局视图中。至于JS错误,可能是开发箱中存在的错误,或者某些压缩不正确(但是,在我所有的MVC开发中,由于缩小效果不好,我还没有看到JS错误)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句