1

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

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

我探索了与项目一起部署的文件,并且 require 包含在解决方案/路径中。这些文件已与它们一起部署。开发和生产副本之间的所有不同之处在于我的 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 模板中的所有内容都应该如此。

知道为什么在非调试部署期间会删除 require 吗?:/

4

1 回答 1

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>
}
于 2013-07-08T07:58:50.607 回答