生产中的JavaScript错误但不是开发/测试(捆绑不处理Linux样式行结尾)

时间:2013-02-26 22:01:27

标签: asp.net-mvc asp.net-mvc-4 system.web.optimization scriptbundle

我有一个使用以下javascript库在MVC4上运行的网站。 jQuery,jQueryValidate,Bootstrap,FineUploader,MaskedInput,Knockout和Modernizr。我也有我的应用程序特定的JavaScript在那里。它们都是使用System.Web.Optimization命名空间中的Script Bundling功能加载的。我的包看起来像这样。

bundles.Add(new ScriptBundle("~/bundles/scripts").Include(
    "~/Scripts/jquery-1.7*",
    "~/Scripts/modernizr.*",
    "~/Scripts/bootstrap*",
    "~/Scripts/jquery.validate.*",
    "~/Scripts/jquery.maskedinput-1.3.*",
    "~/Scripts/MyApp*",
    "~/Scripts/jquery.unobtrusive*",
    "~/Scripts/knockout-*",
    "~/Scripts/jquery.fineuploader-3.0.js"));

但由于某些原因,当网站在我的开发系统上正常工作并且在测试时,它在生产中因javascript错误而失败。有错误对我没有意义......

Uncaught ReferenceError: options is not defined

现在当我检查javascript文件时,一切都当然是缩小和压缩的,所以没有运气解密任何东西。还有其他人从Bundling遇到过这种奇怪的行为吗?

1 个答案:

答案 0 :(得分:3)

所以在疯狂地与这个东西打架之后(因为我发布了一个破坏的版本)我将我的开发副本切换为始终应用优化,即使它是在调试版本中。

BundleTable.EnableOptimizations = true;

我现在在我的机器上遇到了同样的问题(至少它是一致的)。我开始考虑这个版本中发生了什么变化,自上次发布以来修改的唯一内容是Nuget包的一些更新和管理任务的一些代码更改。我开始追踪Nuget包的变化并检查那些随javascript变化的那些,希望找到一个线索。经过每一个我去测试页面,问题消失了,但我还没有做任何改变!但是当我试图查看时,我确实遇到过一个提示我的提示。

Inconsistent Line Endings

当我看到这个时,我心不在焉地点击了[是],但是当问题消失后我又恢复了更改并再次尝试了该网站,并且JavaScript错误再次出现。我已将此文件的某些更改粘贴到set the context of this to the element triggering the ajax request。我以前做过这个,但是我需要在从Nuget更新源包之后重新应用更改。当时我认为我在Sublime中已经完成了这个,我猜它是在一些Linux风格的行结尾中复制的。

很长一段时间,System.Web.Optimization命名空间的Bundling功能中似乎存在一个错误,它在Linux样式行结尾处窒息。我希望这可以帮助任何可能遭受这个问题的人。