jQuery 具有依赖性的插件
jQuery Plugin with Dependencies
我正在尝试构建一个“简单的”jQuery
插件,它依赖于其他 jQuery
插件(当然还有 jQuery
它自己)。
经过一些阅读和研究,我决定 require.js
可以胜任这项工作,但我想不出 2 个主要问题。
假设 myPlugin.js
依赖于另外 2 个 jQuery 插件:
bootstrap-datetimepicker.js
和 select2.js
.
尽管 bootstrap-datetimepicker.js
取决于 moment.js
和 bootstrap.js
两个插件以及 myPlugin.js
都依赖于 jQuery.js
第一期:
我想为使用 myPlugin.js
的人简化事情。
我只想为他们提供一个图书馆,并要求他们在 HTML 页面上包含 myPlugin.js
。
然后,通过使用类似以下内容调用插件:$('#target').myPlugin();
、
myPlugin.js
将完成所有必要的工作,注入依赖项以及该插件的实际工作。我无法理解的是层次结构应该如何。
我的意思是,如果我要使用 require.js
,我需要将它包含在 myPlugin.js
之前的 html 页面上,
我还需要管理依赖项加载的顺序。
例如,对于 bootstrap-datetimepicker.js
我需要先加载 moment.js
,jquery.js
和 bootstrap.js
.
所以层次结构和时间安排是我第一期的主要挑战。
第 2 期:
重复和冲突怎么办?
例如,可能想要使用 myPlugin.js
的人已经加载了 jQuery.js
和 bootstrap.js
。
我不想再次加载它并在他/她的页面上创建重复项和冲突。
您的插件应使用 UMD pattern 以适合其执行环境的方式获取依赖项。您只需要更新 AMD 案例的分支以列出所有依赖项并让 RequireJS 加载它们。
您分发的内容应该只包含您的插件,您的代码不应尝试加载依赖项。否则,我可以根据经验告诉你,使用 AMD 加载程序的人(仅举 一个 组)会诅咒你的名字。我不是在开玩笑,当您开始通过 AMD 加载程序和 外部 加载脚本时,会产生很多难以解决的问题。记录您的插件期望可用的内容,并让插件的用户设置他们的环境以提供必要的模块。
如果您认为包含依赖项的构建对您插件的某些用户有用,那么创建一个包含几乎所有内容的附加构建。 (在我看来,至少 jQuery 也不应该出现在这个版本中。)
我正在尝试构建一个“简单的”jQuery
插件,它依赖于其他 jQuery
插件(当然还有 jQuery
它自己)。
经过一些阅读和研究,我决定 require.js
可以胜任这项工作,但我想不出 2 个主要问题。
假设 myPlugin.js
依赖于另外 2 个 jQuery 插件:
bootstrap-datetimepicker.js
和 select2.js
.
尽管 bootstrap-datetimepicker.js
取决于 moment.js
和 bootstrap.js
两个插件以及 myPlugin.js
都依赖于 jQuery.js
第一期:
我想为使用 myPlugin.js
的人简化事情。
我只想为他们提供一个图书馆,并要求他们在 HTML 页面上包含 myPlugin.js
。
然后,通过使用类似以下内容调用插件:$('#target').myPlugin();
、
myPlugin.js
将完成所有必要的工作,注入依赖项以及该插件的实际工作。我无法理解的是层次结构应该如何。
我的意思是,如果我要使用 require.js
,我需要将它包含在 myPlugin.js
之前的 html 页面上,
我还需要管理依赖项加载的顺序。
例如,对于 bootstrap-datetimepicker.js
我需要先加载 moment.js
,jquery.js
和 bootstrap.js
.
所以层次结构和时间安排是我第一期的主要挑战。
第 2 期:
重复和冲突怎么办?
例如,可能想要使用 myPlugin.js
的人已经加载了 jQuery.js
和 bootstrap.js
。
我不想再次加载它并在他/她的页面上创建重复项和冲突。
您的插件应使用 UMD pattern 以适合其执行环境的方式获取依赖项。您只需要更新 AMD 案例的分支以列出所有依赖项并让 RequireJS 加载它们。
您分发的内容应该只包含您的插件,您的代码不应尝试加载依赖项。否则,我可以根据经验告诉你,使用 AMD 加载程序的人(仅举 一个 组)会诅咒你的名字。我不是在开玩笑,当您开始通过 AMD 加载程序和 外部 加载脚本时,会产生很多难以解决的问题。记录您的插件期望可用的内容,并让插件的用户设置他们的环境以提供必要的模块。
如果您认为包含依赖项的构建对您插件的某些用户有用,那么创建一个包含几乎所有内容的附加构建。 (在我看来,至少 jQuery 也不应该出现在这个版本中。)