如何排除requirejs中的子文件夹?

时间:2017-03-09 11:40:25

标签: jquery requirejs magento2

我的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文件,我无法在那里更改来源...

1 个答案:

答案 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));