行$("body").slimScroll();
抛出错误,因为未定义slimScroll
。这是因为require.js
可能不会自动加载shim
密钥,如果您需要任何模块,在shim
中指定为依赖项(我想如果我有shim
jquery.slimscroll
及其相关性为jquery
,当我需要jquery
时,它会自动加载jquery.slimscroll
- 这种情况不会发生。)
所以正确的方法是调用define(['jquery', 'jquery.slimscroll') function ($) ...
,因此需要知道我需要jquery.slimscroll
,因为它是在垫片中,它将加载一点不同,因为它不兼容AMD。
问题是如果我有很多jquery plugins
,我需要总是在define
调用中传递我需要的所有插件。有什么办法,如何解决这种恼人的行为,只写define(['jquery'], function ($) ..
?
require.config({
baseUrl: 'js/bower',
paths: {
react: 'react/react-with-addons',
jquery: 'jquery/dist/jquery',
'jquery-private': '../jquery-private',
'jquery.slimscroll': 'jquery-slimscroll/jquery.slimscroll.min'
},
map: {
'*': {
jquery: 'jquery-private',
},
'jquery-private': {
jquery: 'jquery'
}
},
shim: {
'jquery.slimscroll': ['jquery']
}
});
require(['jquery'], function ($) {
$("body").slimScroll();
});
答案 0 :(得分:1)
您可以将jquery插件添加到jquery-private
模块的依赖项中。
define(['jquery', 'jquery.slimscroll', ...], function (jQuery) {
return jQuery.noConflict(true);
});
这样,当任何模块需要jquery
时,插件也会同时加载。
我假设jquery-private
是为了加载jQuery,以便它不与其他版本的jQuery冲突。这就是我的例子在上面所反映的内容,但模块实际上做的并不重要。
使用此方法,您仍需要为每个不是AMD模块的插件配置shim
。此外,您的插件必须获得map
设置,就像jquery-private
一样,以获得真正的jquery
模块。否则,将存在循环依赖。