带有依赖关系的jQuery插件

时间:2016-10-20 08:23:32

标签: javascript jquery jquery-plugins requirejs dependencies

我正在尝试构建一个“简单”jQuery插件,该插件依赖于其他jQuery插件(当然还有jQuery个插件)。

经过一些阅读和研究后,我认为require.js可以胜任这项工作,但我无法弄清楚两个主要问题。

让我们说myPlugin.js取决于其他2个jQuery插件:

bootstrap-datetimepicker.jsselect2.js

虽然bootstrap-datetimepicker.js取决于moment.jsbootstrap.js 插件和myPlugin.js都取决于jQuery.js

第一期:

我想简化使用myPlugin.js的人的事情。 我想向他们提供一个图书馆,并要求他们在HTML页面上加入myPlugin.js 然后,通过以下内容调用插件:$('#target').myPlugin();
myPlugin.js将完成注入依赖项的所有必要工作以及此插件的实际工作。我无法理解的是层次结构应该如何 我的意思是如果我使用require.js我需要它包含在myPlugin.js之前的html页面上, 我还需要管理依赖加载的顺序 例如,使用bootstrap-datetimepicker.js我需要先加载moment.jsjquery.jsbootstrap.js
所以层次结构和时间是我第一期的主要挑战。

第二期:

重复和冲突怎么样?
也许想要使用myPlugin.js的人已加载jQuery.jsbootstrap.js。例如 我不想再次加载它并在他/她的页面上创建重复和冲突。

1 个答案:

答案 0 :(得分:2)

您的插件应该使用UMD pattern以适合其执行环境的方式获取依赖项。您只需更新AMD案例的分支以列出所有依赖项,并让RequireJS加载它们。

您发布的内容应该只包含 插件,并且您的代码不应尝试加载依赖项。否则,我可以从经验告诉你,使用AMD加载器的人(仅命名一个组)会诅咒你的名字。我不是在开玩笑,当你开始通过AMD加载器和外部加载脚本时,这会产生许多难以解决的问题。记录您的插件期望可用的内容,并让插件的用户设置他们的环境以提供必要的模块。

如果您认为包含依赖项的构建对您的插件的某些用户有用,那么创建一个几乎包含所有内容的其他构建。 (在我看来,jQuery至少也不应该在这个版本中。)