2016-07-29 36 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