RequireJS优化器 - Oracle MapViewer有多个匿名定义

时间:2016-07-29 07:15:52

标签: jquery requirejs oracle-map-viewer

我使用RequireJS 2.2.0为我的项目使用以下配置:

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。我用谷歌搜索它,我发现这是一个issue的jQuery Hammer(包含在oraclemaps中)。运行应用程序会导致mismatched anonymous define() module

我尝试将oraclemaps放入exclude/excludeShallow并将其加载到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"
})

我该怎么办?有什么想法吗?

1 个答案:

答案 0 :(得分:0)

r.js优化程序无法理解包含多个匿名define调用的文件。

您必须找到不包含多个匿名oraclemaps来电的define版本。 (这意味着除了oraclemaps之外,你必须得到jQuery和Kendo datepicker。)如果这样的构建不可用,你可以处理oraclemaps来删除额外的模块。或者您可以对其进行处理,以便为define调用添加名称。