我从一个大型合作客户端获得了一个设计库,该客户端使用Bootstrap 3和Require.js构建。它非常健壮,使用各种脚本构建得很好,使用Require.js加载jQuery。问题是,Drupal已经加载了jQuery,而双重加载导致一些项失败。如果我删除了所有的Require.js调用,Drupal jQuery的功能就会很好。如果我删除基本的Drupal jQuery文件,那么所有使用Require.js文件的东西都会工作得很好。以下是我考虑过的方案:
还有其他建议吗?
更新按Nikos Paraskevopoulos的回答:
我已经将Drupal配置为加载require.js包附带的require.js版本,Drupal对此很满意。因此,在每一页上,我按以下顺序加载:
/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-sortable-amd的脚本错误
这是合情合理的,因为他们都被宣布在一起。麻瓜。
发布于 2014-11-24 09:51:29
关于备选案文2:
我不知道具体情况是如何加载的,但我猜Drupal加载了jQuery +它需要的其他东西,然后加载了RequireJS,然后加载了它自己版本的jQuery +它需要的其他东西。
首先,您应该确保Drupal和您的RequireJS应用程序都可以使用相同版本的jQuery。然后在您的RequireJS配置中使用shim,而不是正常加载它,例如:
require.config({
...
paths: {
// REMOVE THIS IF USED (PROBABLY IS)
jquery: 'lib/jquery-x.y.z'
...做:
require.config({
...
shim: {
jquery: {
exports: 'jQuery' // NOTE THE CASE OF 'Q', THIS IS THE GLOBAL NAME
}
...说明:如果jQuery是在RequireJS之后加载的,它将自己定义为jquery (小写Q)。这是其他模块所使用的依赖于jQuery的名称。另一方面,如果它是在RequireJS之前加载的,它不会定义itdelf,只剩下jQuery (可能还有$)全局。上面的shim指示RequireJS在一个模块依赖于jquery模块时使用全局jQuery变量,这有望实现您想要的结果,即只通过jquery加载jQuery。
https://stackoverflow.com/questions/27094264
复制相似问题