在我的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文件,所以我不能在那里更改源代码...
发布于 2017-04-10 18:27:19
我还没有找到一个完美的解决方案来解决我的问题,但我是这样解决的:
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));https://stackoverflow.com/questions/42694458
复制相似问题