1

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

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 文件时,所有内容当然都被缩小和压缩了,所以没有运气从中破译任何东西。有没有其他人在捆绑中遇到过这样的奇怪行为?

4

1 回答 1

3

因此,在疯狂地与这件事作斗争之后(因为我发布了一个损坏的构建),我将我的开发副本切换为始终应用优化,即使它是在调试构建中。

BundleTable.EnableOptimizations = true;

我现在在我的机器上遇到了同样的问题(至少它是一致的)。我开始思考这个版本的变化以及自上次发布以来唯一修改的内容是来自 Nuget 包的一些更新和对管理任务的一些代码更改。我开始追踪 Nuget 包的变化,并检查了那些有 javascript 变化的包,希望能找到线索。在浏览完每一个之后,我去测试页面并且问题消失了,但我还没有进行任何更改!但是,当我尝试查看它时,我确实遇到了一个提示。

不一致的行尾

当我看到这个时,我心不在焉地点击了[是],但是当问题消失时,我恢复了更改并再次尝试了该站点,JavaScript 错误又回来了。我已经粘贴了对该文件的一些更改,以设置触发 ajax 请求的元素的上下文this。我之前做过这个,但我需要在从 Nuget 更新源包后重新应用更改。当时我想我已经在 Sublime 中做到了这一点,我猜它复制了一些 Linux 风格的行尾。

长话短说,System.Web.Optimization 命名空间的 Bundling 功能中似乎存在一个错误,该错误会阻塞 Linux 样式的行尾。我希望这可以帮助其他可能遇到此问题的人。

于 2013-02-26T22:01:26.783 回答