要求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检查程序错误:
有什么想法吗?
提前感谢。
答案 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。