我有以下文件夹结构
index.html
scripts/
- app.js
- app/
-- main.js
-- page.js
- lib/
-- require.js
-- jquery.min.js
index.html:
<head>
<script data-main="scripts/app" src="scripts/lib/require.js"></script>
</head>
app.js:
requirejs.config({
baseUrl: 'scripts/lib',
paths: {
app : '../app',
jquery : 'jquery.min'
},
shim : {
'jquery': {
deps : ['app/page'],
exports: '$'
}
}
});
requirejs(['app/main']);
main.js:
require(["app/page"], function(page){
page.renderPage();
});
page.js:
define(['jquery'], function($) {
return {
renderPage : function() {
//some code
}
}
});
加载index.html时,我在控制台中收到以下错误:
未捕获错误:模块加载超时:jquery http://requirejs.org/docs/errors.html#timeout 在makeError(require.js:168)的checkLoaded(require.js:698)at require.js:719
我已经检查了很多相关问题并尝试了各种选项,但是无法使jquery与requirejs一起工作。我究竟做错了什么?
答案 0 :(得分:0)
shim
你不应该有jquery
。 shim
配置选项仅适用于非实际AMD模块的脚本。 AMD模块通过调用define
向模块加载器注册自己。 jQuery在很久以前就增加了将自己注册为AMD模块的支持,所以它本身就调用define
。您可以在其源代码中看到它here:
if ( typeof define === "function" && define.amd ) {
define( "jquery", [], function() {
return jQuery;
} );
}
jQuery调用define
,因此您不能为其设置shim
。
将shim
与AMD模块一起使用没有明确的含义。换句话说,当您尝试为AMD模块指定shim
配置时,RequireJS不必符合任何特定行为。 RequireJS可能会忽略它,或者它可能表现不佳。