与RequireJS的冗余依赖项

时间:2016-02-23 16:31:45

标签: javascript jquery jquery-ui requirejs shared-libraries

我的问题是让冗余的RequireJS依赖项指向同一个JS库。

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

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

如何配置RequireJS(即在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

2 个答案:

答案 0 :(得分:5)

路易斯'回答指出我正确的方向,我仍然花了一些时间来找出完整的解决方案,所以我在这里发布我的工作requirejs配置以供将来参考:

hostname

请注意,我似乎无法使用cdnjs中的ssh.connect(hostname, port=22, username=x, password=y)脚本。这意味着在您的模块中,您必须在define命令中引用import os hostname=input("enter the ipaddress") os.system(hostname) 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'] );

答案 1 :(得分:4)

查看您要加载的jquery-ui.js文件,我发现它是多个函数的组合,可以在单独的文件中调用{{1} } 只有一次。因此它注册为单个模块。这一点很重要,因为如果它为definedefine等每个人调用了jquery-ui/mouse,那么解决方案就会有所不同,因为我们会谈论单个包含多个模块的jQuery UI文件。

好的,所以这个建立了,你可以做的是在RequireJS配置中使用jquery-ui/draggable。我假设您已经有一个正确的map配置,允许将paths文件作为jquery-ui.js模块加载。添加此地图:

jquery.ui

这表示在请求map: { '*': { 'jquery-ui/mouse': 'jquery.ui', 'jquery-ui/draggable': 'jquery.ui', // And so on for all different cases... } } 的所有模块(*)中,然后加载jquery-ui/mouse,依此类推,以便列在{{1}下列出的所有其他模块}。