我正在尝试构建一个“简单”jQuery
插件,该插件依赖于其他jQuery
插件(当然还有jQuery
个插件)。
require.js
可以胜任这项工作,但我无法弄清楚两个主要问题。
让我们说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
。
所以层次结构和时间是我第一期的主要挑战。
重复和冲突怎么样?
也许想要使用myPlugin.js
的人已加载jQuery.js
和bootstrap.js
。例如
我不想再次加载它并在他/她的页面上创建重复和冲突。
答案 0 :(得分:2)
您的插件应该使用UMD pattern以适合其执行环境的方式获取依赖项。您只需更新AMD案例的分支以列出所有依赖项,并让RequireJS加载它们。
您发布的内容应该只包含 插件,并且您的代码不应尝试加载依赖项。否则,我可以从经验告诉你,使用AMD加载器的人(仅命名一个组)会诅咒你的名字。我不是在开玩笑,当你开始通过AMD加载器和外部加载脚本时,这会产生许多难以解决的问题。记录您的插件期望可用的内容,并让插件的用户设置他们的环境以提供必要的模块。
如果您认为包含依赖项的构建对您的插件的某些用户有用,那么创建一个几乎包含所有内容的其他构建。 (在我看来,jQuery至少也不应该在这个版本中。)