2016-07-29 32 views
0

我用RequireJS 2.2.0我用下面的配置項目:RequireJS優化 - 的Oracle MapViewer有不止一個匿名定義

require.config({ 
    baseUrl: "Scripts/js/kendo", 
    paths: { 
     "kendo.datepicker.min": "kendo.datepicker.min", 
     "jquery-ui": "../../lib/jquery-ui.min", 
     "modules": "../../modules", 
     "colorpicker": "../../lib/colorpicker", 
     "eye": "../../lib/eye", 
     "layout": "../../lib/layout", 
     "utils": "../../lib/utils", 
     "oraclemaps": "../../lib/oraclemapsv2" 
    }, 
    shim: { 
     "kendo.datepicker.min": ["oraclemaps"], 
     "jquery-ui": ["oraclemaps"], 
     "colorpicker": ["jquery-ui"], 
     "eye": ["colorpicker"], 
     "layout": ["eye"], 
     "utils": ["layout"] 
    } 
}); 

oraclemaps是一個第三方庫,其中包括jQuery的。我使用他們的版本,所以我定義了Kendo和jQuery-UI依賴關係。 oraclemaps有一個組件,按要求順序需要jquery-ui, colorpicker, eye, layout, and utils。這也是我在墊片中定義的。該應用程序運行良好。

問題現在與優化器。使用配置,我得到了一個錯誤oraclemapsv2.js has more than one anonymous define。我GOOGLE了它,我發現這是一個jQuery Hammer(包含在oraclemaps中)的issue。運行應用程序導致mismatched anonymous define() module

我試着把的oraclemaps加載到HTML中,但我得到了Script error for "jquery", needed by: jquery-ui, kendo.core.min

這裏是我的優化配置:

({ 
    baseUrl: "../js/kendo", 
    paths: { 
     "kendo.datepicker.min": "kendo.datepicker.min", 
     "jquery-ui": "../../lib/jquery-ui.min", 
     "modules": "../../modules", 
     "colorpicker": "../../lib/colorpicker", 
     "eye": "../../lib/eye", 
     "layout": "../../lib/layout", 
     "utils": "../../lib/utils", 
     "oraclemaps": "../../lib/oraclemapsv2" 
    }, 
    shim: { 
     "kendo.datepicker.min": ["oraclemaps"], 
     "jquery-ui": ["oraclemaps"], 
     "colorpicker": ["jquery-ui"],    
     "eye": ["colorpicker"], 
     "layout": ["eye"], 
     "utils": ["layout"] 
    }, 
    include: ["../../lib/require.min"], 
    exclude: ["oraclemaps"], 
    name: "../../app", 
    out: "../build/app-built.js" 
}) 

我該怎麼辦?有任何想法嗎?

回答

0

優化器可以通過r.js瞭解包含多個匿名define調用的文件。

您必須找到oraclemaps的內部版本,其中不包含多個匿名define調用。 (這意味着你必須得到jQuery和其他以外的Kendo datepicker。)如果這樣的構建不可用,你可以處理oraclemaps來挖掘額外的模塊。或者您可以處理它,以便爲define呼叫添加名稱。

+0

你能告訴我如何爲匿名模塊添加名字嗎?例如,這是Hammer的部分。 a.Hammer = e,「undefined」!= typeof module && module.exports &&(module.exports = e),「function」== typeof define && define.amd? define([「jquery」],function(b){return d(a.Hammer,b)}):d(a.Hammer,a.jQuery || a.Zepto) – springrolls

+0

您只需要將名稱添加爲第一個參數。像'define(「Hammer」,[「jquery」],...' – Louis

+0

我嘗試加載我自己的jQuery並將noConflict設置爲true,但它沒有工作。我會再看看雖然,避風港試了足夠長的時間 – springrolls