2017-03-09 45 views
0

我有以下requirejs配置在我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的私有/ jQuery的UI-timepicker-插件

在這種情況下,真正的文件位於js/jquery/jquery-ui-timepicker-addon中。正如你所看到的,jquery /也在jquery-private /中解決。

此變通辦法的原因是需要將所需的jquery模塊作爲noConflict版本插入。沒有它,我得到以下錯誤:Uncaught TypeError:$ .widget不是一個函數。 由於我需要廠商js文件,我不能夠改變那裏的源...

回答

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)); 
相關問題