我的Magento2项目中有以下requirejs配置:
var config = {
map: {
'*': {
productView: 'Mediahuis_Base/js/product-view',
refreshCartScript: 'Mediahuis_Base/js/checkout/refresh-cart',
addressCompletion: 'Mediahuis_Base/js/address/completion',
addressCompletionHelper: 'Mediahuis_Base/js/address/completion-helper',
prepareCheckoutShipping: 'Mediahuis_Base/js/checkout/shipping-prepare',
jquery: 'js/jquery-private',
/*'jquery/jquery.mobile.custom': 'jquery/jquery.mobile.custom',
'jquery/jquery-migrate': 'jquery/jquery-migrate',
'jquery/jquery-storageapi': 'jquery/jquery-storageapi',
'jquery/ui': 'jquery/ui',
'jquery/jquery.cookie': 'jquery/jquery.cookie',
'jquery/validate': 'jquery/validate',
'jquery/jquery-ui-timepicker-addon': 'jquery/jquery-ui-timepicker-addon',
'jquery/jquery.metadata': 'jquery/jquery.metadata'/**/
},
'js/jquery-private': {
jquery: 'jquery'
}
}
};
JS / jQuery的private.js
define([
"jquery"
], function (jq) {
return jq.noConflict();
});
我会动态解析我在示例中注释掉的路径,因为此列表将一直更改(供应商文件)。
当我手动添加这些内容时,出现以下错误: 未捕获错误:脚本错误:js / jquery-private / jquery-ui-timepicker-addon
在这种情况下,真实文件位于js / jquery / jquery-ui-timepicker-addon中。如您所见,jquery /也在jquery-private /.
中得到解决此解决方法的原因是需要将所需的jquery模块作为noConflict版本插入。没有它,我得到以下错误:未捕获的TypeError:$ .widget不是一个函数。 由于我需要供应商js文件,我无法在那里更改来源...
答案 0 :(得分:0)
我还没有真正找到解决问题的完美方案,但我这样解决了:
var config = {
map: {
'*': {
...
},
'js/jquery-private': {
jquery: 'jquery'
}
}
};
(function (global) {
require.baseLoad = require.load;
require.load = function (context, moduleName, url) {
if (url.indexOf('/jquery.js') !== -1) {
url = url.replace('/jquery.js', '/js/jquery-private.js');
}
require.baseLoad(context, moduleName, url);
};
}(this));