使用bundle时RequireJS模块加载超时

时间:2015-06-07 17:15:53

标签: asp.net-mvc-5 requirejs timeout

要求js在没有捆绑的情况下正常工作。但是无论何时我使用捆绑包,我都会为我想要导入的模块获得超时。

以下是我使用asp.net mvc bundler / minifier

构建软件包的方法
bundles.Add(new ScriptBundle("~/bundles/test").Include(
            "~/scripts/jquery-{version}.js",
            "~/scripts/bootstrap.js",
            "~/scripts/moment.js"));

bundles.EnableOptimizations = true;

Heres是cshtml文件中的require js config:

<script>
    require.config({
        baseUrl: "/scripts",
        paths: {
            jquery: "jquery-1.11.2"
        },
        waitSeconds: 20,
        shim: {
            bootstrap: {
                deps: ['jquery']
            }
        },
        bundles: {
            '@Scripts.Url("~/bundles/test").ToString()': [
                'jquery',
                'bootstrap',
                'moment'
            ]
        }
    });
    require(["app/main/test"]);
</script>

页面的js(app / main / test):

require(['jquery', 'moment'], function ($, moment) {
    console.log(moment().format());
});

Jquery,bootstrap和moment库都在我创建的测试包中,但是我暂时加载了页面加载超时。

这是chrome检查程序错误:

load timeout

有什么想法吗?

提前感谢。

2 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为您根本不需要捆绑。你的要求电话只有jquery和时刻。您已经提供了jquery文件路径,因此requirejs使用该路径下载并提供jquery模块。但由于暂时没有路径定义,因此它只是您创建的捆绑包的一部分。因此requirejs尝试按其模块名称下载时刻作为路径,从而抛出错误。

对此的一个简单修复是要求捆绑本身。

require(['@Scripts.Url("~/bundles/test").ToString()'], function(bundle){
   //At this point jquery, moment and bootstrap will be loaded. 
});

您可以直接在上面的示例中选择使用jQuery,来自全局命名空间的时刻,或者您可以尝试在下面的示例中单独使用它们。我不确定,但由于循环依赖,你可能会因下面的例子而出错。

require(['@Scripts.Url("~/bundles/test").ToString()', 'jquery', 'moment'], function(bundle, $, moment){
       //At this point jquery, moment and bootstrap will be loaded. 
    });

答案 1 :(得分:0)

只需从捆绑包中删除'jquery'

即可
bundles.Add(new ScriptBundle("~/bundles/test").Include(
        "~/scripts/bootstrap.js",
        "~/scripts/moment.js"));
...
bundles: {
    '@Scripts.Url("~/bundles/test").ToString()': [
        'bootstrap',
        'moment'
     ]
}
...

您已在路径

中指定了它
paths: {
    jquery: "jquery-1.11.2"
},

似乎require.js将模块映射到bundle,这样一旦加载了作为bundle一部分的模块,就不会再加载该bundle。