MVC4 - NuGet部署后无法访问Javascript - ReferenceError

时间:2013-08-31 12:13:10

标签: javascript jquery asp.net-mvc razor minify

我刚刚执行了我的MVC应用程序的第一次部署,我遇到了一些Javascript问题。

为了在运行时挂钩,我这样做:

_Layout.cshtml

@if (IsSectionDefined("MyPage"))
{
    <script type="text/javascript">
        $(document).ready(function () {
            @RenderSection("MyPage", required: false)
        });
    </script>
}

MyPage.cshtml

然后在我的Razor视图中我这样做:

@section MyPage
{
    myPage.SomeFunction();
}

myPage.js

(function (myPage, $) {

    myPage.SomeFunction = function () {
    ...
    };

}(window.myPage= window.myPage|| {}, jQuery));

这在VS中的调试中都很有效,但是一旦部署它(在NuGet包中使用Otopus Deploy进行持续部署),我就开始看到如下错误:

ReferenceError: myPage is not defined.

如果我查看源代码并按照包链接进行代码,那么......

但该文件的缩写错误如下:

/* Minification failed. Returning unminified contents.
(683,1-2): run-time warning JS1002: Syntax error: }
(683,51-52): run-time warning JS1002: Syntax error: }
 */
// Contains all the javascript required by the myPage page

我目前正在处理Visual Studio中的JSLint错误,但我认为这些更多是关于格式化而不是直接关联JS上的ReferenceError,因为我可以加载JS,因为我可以从页面源链接到该函数。

关于要查看什么或如何解决此问题的任何指示?

1 个答案:

答案 0 :(得分:0)

这让我难过了一会儿。

所有Javascript都在那里(可以链接到页面源中的包链接),所有文件都在那里,一切都在dev中工作(不是总是吗?)。

无论如何,如果您在已部署的应用程序中看到此错误,则需要执行几个步骤。

首先,您应该下载并安装Visual Studio工具JSLint.VS2012。然后将其设置为显示警告,并且不要将其设置为使构建失败。 JSLint对事物并不善良且非常严格(您坚持使用BP是您的选择,但肯定会推荐!)

所以,你部署你的应用程序和BANG所有可爱的JS都坏了。永远不要害怕...弹出到您的Web应用程序Global.asax文件和Application_Start方法包括:

BundleTable.EnableOptimizations = true;

现在使用此设置集,您可以在Visual Studio中以调试模式启动应用程序,并强制执行所有优化以测试缩小,并将测试更精确地建模到已部署的版本。

一旦您完成了工作并更清楚地看到问题,您就可以使用新JSLint VS插件中的报告来解决潜在问题,以修复语法和其他格式问题。