jQuery 具有依赖性的插件

jQuery Plugin with Dependencies

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

经过一些阅读和研究,我决定 require.js 可以胜任这项工作,但我想不出 2 个主要问题。

假设 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.
所以层次结构和时间安排是我第一期的主要挑战。

第 2 期:

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

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

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

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