Javascript Drupal和Require.js玩得不好-jQuery的两倍负载
我得到了一个大型合作客户端的设计库,该客户端使用bootstrap3和Require.js构建。它非常健壮,使用Require.js加载jQuery的各种脚本构建得很好。问题是,Drupal已经加载了jQuery,双重加载导致一些项失败。如果我删除了所有Require.js调用,Drupal jQuery的东西会非常有用。如果我删除了基本的Drupal jQuery文件,那么使用Require.js的所有东西都会非常有用。以下是我考虑过的一些选择:Javascript Drupal和Require.js玩得不好-jQuery的两倍负载,javascript,jquery,drupal-7,requirejs,Javascript,Jquery,Drupal 7,Requirejs,我得到了一个大型合作客户端的设计库,该客户端使用bootstrap3和Require.js构建。它非常健壮,使用Require.js加载jQuery的各种脚本构建得很好。问题是,Drupal已经加载了jQuery,双重加载导致一些项失败。如果我删除了所有Require.js调用,Drupal jQuery的东西会非常有用。如果我删除了基本的Drupal jQuery文件,那么使用Require.js的所有东西都会非常有用。以下是我考虑过的一些选择: 停止使用Drupal加载jQuery,使用re
/components/jquery/jquery.js
/misc/jquery.once.js
/misc/drupal.js
/components/requirejs/require.js
/js/require.config.js
我的requires.config如下所示:
requirejs.config({
baseUrl: "./",
paths: {
.....
jquery:
"components/jquery/jquery", "jquery-csv": "components/jquery-csv/src/jquery.csv",
"jqueryui-sortable-amd": "components/jqueryui-sortable-amd/js/jquery-ui-1.10.2.custom",
.....
},
shim: {
"jquery-backstretch": [
"jquery"
],
masonry: [
"jquery"
],
OpenLayers: {
exports: "OpenLayers"
},
"jquery-csv": [
"jquery"
]
}
});
如果我从路径中删除jquery条目,并添加:
jquery: {
exports: 'jQuery' // NOTE THE CASE OF 'Q', THIS IS THE GLOBAL NAME
}
我立即得到如下错误:
未捕获错误:jqueryui可排序amd的脚本错误
这是有道理的,因为它们都是一起声明的。uggg.关于选项2:
我不知道具体是如何加载的,但我猜Drupal加载jQuery+它需要的其他东西,然后加载RequireJS,然后再加载它自己版本的jQuery+它需要的其他东西
首先,您应该确保Drupal和您的RequireJS应用程序都可以使用相同版本的jQuery。然后,在您的RequireJS配置中,使用shim jQuery代替正常加载,例如,代替:
require.config({
...
paths: {
// REMOVE THIS IF USED (PROBABLY IS)
jquery: 'lib/jquery-x.y.z'
...
做:
说明:如果jQuery是在RequireJS之后加载的,那么它将自己定义为jQuery
(小写Q)。这是其他模块用来依赖jQuery的名称。另一方面,如果它是在RequireJS之前加载的,那么它不会定义itdelf,只剩下jQuery
(可能还有$
)全局变量。当模块依赖于jQuery
模块时,上面的垫片指示RequireJS使用全局jQuery
变量,这有望实现您想要的,即仅通过Drupal加载jQuery
require.config({
...
shim: {
jquery: {
exports: 'jQuery' // NOTE THE CASE OF 'Q', THIS IS THE GLOBAL NAME
}
...