未捕获的ReferenceError:requirejs未定义为main.js

时间:2013-07-08 07:02:33

标签: requirejs single-page-application durandal singlepage

我尝试部署基于Durandal的解决方案。但是一旦部署我就会收到以下错误。

Uncaught ReferenceError: requirejs is not defined main.js:1
(anonymous function)

我探索了与项目一起部署的文件,并且需求包含在解决方案/路径中。这些文件已与它们一起部署。开发和生产副本之间的所有不同之处在于我的java脚本文件被压缩。我的下一步是以任何方式查看这是否与问题有关?

更新: 我发现问题的根源如下:

<body>
    <div id="applicationHost">
        @Html.Partial("_splash")
    </div>

    @Scripts.Render("~/scripts/vendor")
    @if (HttpContext.Current.IsDebuggingEnabled)
    {
        <script type="text/javascript" src="~/App/durandal/amd/require.js" data-main="@Url.Content("~/App/main")"></script>
    }
    else
    {
        <script type="text/javascript" src="~/App/main.js"></script>
    }

</body>

如果我删除 IsDebuggingEnabled 检查,只需保留以下内容即可(显然)

 <script type="text/javascript" src="~/App/durandal/amd/require.js" data-main="@Url.Content("~/App/main")"></script>

据我记忆,我没有触及过此代码(在模板初始项目设置时创建)。所有这些都应该与Durandal VSX模板一样。

在非调试部署期间,任何想法都会被删除吗? :/

1 个答案:

答案 0 :(得分:2)

Durandal 1.2附带一个optimizer.exe(http://durandaljs.com/documentation/Optimizing-On-Dot-Net/),可以创建一个优化版本main-built.js,其中包含Almond(默认)或RequireJS捆绑。上面的示例尝试加载源main.js,这就是抛出错误的原因。

成功运行optimizer.exe后,代码应更改为此。

...
else
{
    <script type="text/javascript" src="~/App/main-built.js"></script>
}