RequireJS的冗余依赖

Pet*_* G. 4 javascript jquery jquery-ui shared-libraries requirejs

我的问题是具有指向相同JS库的冗余RequireJS依赖项。

引用的库是jQuery UI,它在内部和外部都由Gridstack引用,这导致了此问题。

内部和外部引用都应指向一个文件jquery-ui.js

如何配置RequireJS(即inside main.js)以将这些引用作为一个引用来处理,而无需对任何现有模块/库进行任何更改?

  • JQuery UI v1.11.2-我的JQuery UI分发(单个文件)

  • Gridstack 0.2.5-dev的 -库引用它jquery-ui/corejquery-ui/widgetjquery-ui/mousejquery-ui/draggablejquery-ui/resizable

  • 我在jquery.ui内部使用

小智 5

尽管Louis的答案为我指明了正确的方向,但仍然需要一些时间来找出完整的解决方案,因此我在此处发布了我的工作requirejs配置,以供将来参考:

requirejs.config( {

    baseUrl: 'js',
    paths: {
        jquery: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min',

        'jquery.ui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min',

        lodash: 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min',
        gridstack: 'https://cdnjs.cloudflare.com/ajax/libs/gridstack.js/0.3.0/gridstack.min',
        'gridstack.jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/gridstack.js/0.3.0/gridstack.jQueryUI.min',

    },
    map: {
        '*': {
            'jquery-ui/data': 'jquery.ui',
            'jquery-ui/disable-selection': 'jquery.ui',
            'jquery-ui/focusable': 'jquery.ui',
            'jquery-ui/form': 'jquery.ui',
            'jquery-ui/ie': 'jquery.ui',
            'jquery-ui/keycode': 'jquery.ui',
            'jquery-ui/labels': 'jquery.ui',
            'jquery-ui/jquery-1-7': 'jquery.ui',
            'jquery-ui/plugin': 'jquery.ui',
            'jquery-ui/safe-active-element': 'jquery.ui',
            'jquery-ui/safe-blur': 'jquery.ui',
            'jquery-ui/scroll-parent': 'jquery.ui',
            'jquery-ui/tabbable': 'jquery.ui',
            'jquery-ui/unique-id': 'jquery.ui',
            'jquery-ui/version': 'jquery.ui',
            'jquery-ui/widget': 'jquery.ui',
            'jquery-ui/widgets/mouse': 'jquery.ui',
            'jquery-ui/widgets/draggable': 'jquery.ui',
            'jquery-ui/widgets/droppable': 'jquery.ui',
            'jquery-ui/widgets/resizable': 'jquery.ui',
        }
    },
} );

require( ['dashhub'] );
Run Code Online (Sandbox Code Playgroud)

请注意,我似乎无法使其与gridstack.all.jscdnjs中的脚本一起使用。这意味着在模块中,您必须同时引用gridstackgridstack.jqueryui在define命令中。